Странное поведение при использовании делегатов и лямбда-выражений

В качестве средства внедрения отложенного вычисления форматирования в разрабатываемой мной библиотеке я определил делегатов

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 во втором лямбда-выражении? Есть ли способ обойти это поведение?

15
задан DotNetStudent 3 February 2012 в 11:54
поделиться