Недавно я писал некоторый код для WriteLine с использованием делегата в .NET 3.5.
Все шло хорошо с использованием различных делегатов Action, пока я не пришел к перегрузке WriteLine, которая
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3)
Поскольку я использую .NET 3.5, делегат Action<T1, T2, T3, T4, T5>
отсутствует, поэтому я быстро написал свой собственный:
public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
Затем я назначил WriteLine этому методу Action<string, object, object, object, object> action = Console.WriteLine;
и получил сообщение об ошибке
Нет перегрузки для 'WriteLine' соответствует делегату 'Действие <строка, объект, объект, объект, объект>'
Я думал, что это должно быть вызвано какой-то неполадкой, поэтому я явно объявил нового делегата:
public delegate void WriteLineAction(string format, object arg0, object arg1, object arg2, object arg3);
Затем я попытался назначить WriteLine этому новому методу и снова получил сообщение об ошибке:
Нет перегрузки для 'WriteLine' соответствует делегату 'WriteLineAction'
Еще более странным является то, что если я щелкну правой кнопкой мыши на вызове Console.WriteLine, который ошибочен, и скажу «Перейти к определению», это приведет меня к правильной версии WriteLine в метаданных, так почему не может ли он сопоставить метод с делегатом. Я делаю что-то действительно глупое или это известная проблема / функция?