Как передать делегат, проигнорировав его аргументы?
Допустим, я хочу сделать запись в консоль без передачи аргументов в метод. Возможно ли это как-нибудь сделать?
public static void Test(Action<int, int, int, int, int, int, int, int> runAfterwork)
{
runAfterwork(0, 1, 2, 3, 4, 5, 6, 7);
}
static void Main(string[] args)
{
Test(/*Хочу вызвать Console.WriteLine("smth")*/);
}
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Вы определили для метода Test параметр Action, который сам принимает восемь параметров. Следовательно, при вызове нужно указать именно такой делегат - с восемью параметрами.
Test((x1, x2, x3, x4, x5, x6, x7, x8) => Console.WriteLine("smth"));
В теле делегата - Console.WriteLine("smth") - аргументы игнорируются, никак не используются.
Можно делегат создать заранее и далее использовать его:
Action<int, int, int, int, int, int, int, int> action = (x1, x2, x3, x4, x5, x6, x7, x8) => Console.WriteLine("smth");
Test(action);
В C# есть такое понятие: Discards - явное указание, что значение отбрасывается, не используется. Возможно, вам нужно именно это.
(_, _, _, _, _, _, _, _) => Console.WriteLine("smth")