Comportamiento extraño con delegados y lambdas
Como medio para introducir una evaluación de formato diferido en una biblioteca que estoy desarrollando, he definido los delegados
public delegate string MessageFormatterDelegate(string message, params object[] arguments);
public delegate string MessageFormatterCallback(MessageFormatterDelegate formatterDelegate);
y algo similar a la siguiente clase
public static class TestClass
{
public static string Evaluate(MessageFormatterCallback formatterCallback)
{
return (formatterCallback(String.Format));
}
}
in embargo, esto se está comportando de manera bastante extraña: cuando se ejecuta desde unaextern proyecto, la declaración
Console.WriteLine(TestClass.Evaluate(message => message("{0},{1},{2}", 1, 2, 3)));
hacen compilar, fallando con el error
Error 1 Delegate 'MessageFormatterDelegate' does not take 4 arguments
mientra
Console.WriteLine(TestClass.Evaluate((MessageFormatterDelegate message) => message("{0},{1},{2}", 1, 2, 3)));
compila y funciona sin problemas, imprimiendo1,2,3
en la consola. ¿Por qué tengo que calificar elmessage
argumento conMessageFormatterDelegate
escriba la segunda expresión lambda? ¿Hay alguna forma de evitar este comportamiento?