tengo la siguiente función de orden superior:argumentos de tipo no se pueden deducir a partir del uso de la función de orden superior
public static Func<T, bool> Not<T>(Func<T, bool> otherFunc)
{
return arg => !otherFunc(arg);
}
Y tratando de llamarlo así:
var isValidStr = LinqUtils.Not(string.IsNullOrWhiteSpace);
Compilador me da el error "no se pueden inferir los argumentos de tipo a partir del uso". pero las siguientes obras:
var isValidStr = LinqUtils.Not((string s) => string.IsNullOrWhiteSpace(s));
me preguntan cuál es la diferencia? string.IsNullOrWhiteSpace
ya es una función no sobrecargada con exactamente la misma firma.
Como se mencionó en los comentarios, lo siguiente también funciona y todavía no explica por qué la inferencia de tipos fracasa en este caso:
var isValidStr = LinqUtils.Not<string>(string.IsNullOrWhiteSpace);
posible duplicado de [C# 3.0 tipo genérico de inferencia - pasando un delegado como parámetro de función] (http://stackoverflow.com/questions/407983/c-sharp-3-0-generic-type-inference-passing- a-delegate-as-a-function-parameter) –
IsNullOrWhiteSpace es un grupo de métodos. El grupo de métodos solo tiene un miembro participante hoy, pero podría obtener más en el futuro. –