В качестве средства внедрения отложенного вычисления форматирования в разрабатываемой мной библиотеке я определил делегатов
public delegate string MessageFormatterDelegate(string message, params object[] arguments);
public delegate string MessageFormatterCallback(MessageFormatterDelegate formatterDelegate);
и что-то вроде следующего класса
public static class TestClass
{
public static string Evaluate(MessageFormatterCallback formatterCallback)
{
return (formatterCallback(String.Format));
}
}
. Однако это ведет себя достаточно странно: при запуске из Внешний проект , оператор
Console.WriteLine(TestClass.Evaluate(message => message("{0},{1},{2}", 1, 2, 3)));
не компилирует , а не , завершается с ошибкой
Error 1 Delegate 'MessageFormatterDelegate' does not take 4 arguments
, в то время как
Console.WriteLine(TestClass.Evaluate((MessageFormatterDelegate message) => message("{0},{1},{2}", 1, 2, 3)));
компилируется и работает без проблем, выводит 1,2,3
] в консоли. Почему я должен квалифицировать аргумент message
типом MessageFormatterDelegate
во втором лямбда-выражении? Есть ли способ обойти это поведение?