Другие языки программирования и технологии

C# Написать программу, в которой с помощью делегатов и анонимных методов (лямбда выражений) создаётся экземпляр делегата,

которой вызывается без аргументов, а результатом возвращает текстовое значение дня недели. При каждом новом вызове экземпляра результатом возвращается значение следующего дня недели.
Это абсолютно бредовое задание:
1. Делегат - это указатель на метод и его параметры. ВСЕ. Больше НИЧЕГО.
2. Таким образом, если делегат возвращает просто строку, никоим образом нельзя ограничить такой делегат так, чтобы он возвращал только дни недели - он вернет ЛЮБУЮ строку, которую вернет ассоциированный с ним метод.
3. Создание экземпляра делегата нельзя сделать через лямбда-выражение. Т. е. implicitly он, ясен пень, при некоторых условиях будет создан, но explicitly - нельзя, нужен new.
4. Делегат сам по себе не может хранить и обрабатывать никакую информацию, поэтому понятие "следующий вызов" применительно к голому делегату - это полная бессмыслица: он просто не отличает один вызов от другого.

Таким образом, скорее всего, тебе нужно создать не делегат, а класс, возвращающий по очереди некие названия дней недели, и дергать какой-то его метод через делегат (возможно, сам класс должен такой делегат для начала вернуть). Но согласись, что это совершенно другое задание.
Шахидин Джалилов
Шахидин Джалилов
54 781
Лучший ответ
Я его вот таким способом решил:

namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = 0;
Program.my = delegate
{
i++;
switch (i)
{
case 1:
return "Понедельник";
case 2:
return "Вторник";
case 3:
return "Среда";
case 4:
return "Четверг";
case 5:
return "Пятница";
case 6:
return "Суббота";
case 7:
return "Воскресенье";
}

return "";
};

for (int q = 0; q < 7; q++)
Console.WriteLine(Program.my());
Console.ReadKey();
}
}
}

С лямбда выражением это могло выглядеть как то так:

namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = -1;
Program.my = ()=>
{

string[] str = { "Понедельник", "Вторник", "Среда","Четверг", "Пятница", "Суббота", "Воскресенье" };
i++;
return str[i];
};

for (int q = 0; q < 7; q++)
Console.WriteLine(my());
Console.ReadKey();
}
}
}
Виталий Гамов боже... я думал больше часа как решить эту задачу, а оказалось это так легко?
Виталий Гамов и вы решили неправильно, так как " i " каждый раз будет увеличиваться(то есть после последнего элемента массива будет исключение), а в задание говориться, что после Воскресенья должен идти Понедельник.