Ho la seguente funzione di ordine superiore:argomenti di tipo non può essere dedotta dal l'utilizzo per la funzione di ordine superiore
public static Func<T, bool> Not<T>(Func<T, bool> otherFunc)
{
return arg => !otherFunc(arg);
}
E cercando di chiamarlo così:
var isValidStr = LinqUtils.Not(string.IsNullOrWhiteSpace);
Compiler mi dà "argomenti tipo non possono essere dedotti dall'errore" di utilizzo. ma le seguenti opere:
var isValidStr = LinqUtils.Not((string s) => string.IsNullOrWhiteSpace(s));
mi chiedo qual è la differenza? string.IsNullOrWhiteSpace
è già una funzione non sovraccaricata con la stessa identica firma.
Come accennato nei commenti, i seguenti lavori anche e ancora non spiega perché l'inferenza di tipo non riesce in questo caso:
var isValidStr = LinqUtils.Not<string>(string.IsNullOrWhiteSpace);
possibile duplicato di inferenza di tipo generico [C# 3.0 - passaggio di un delegato come parametro di funzione] (http://stackoverflow.com/questions/407983/c-sharp-3-0-generic-type-inference-passing- a-delegate-as-a-function-parameter) –
IsNullOrWhiteSpace è un gruppo di metodi. Il gruppo metodo ha oggi solo un membro partecipante, ma potrebbe ottenere di più in futuro. –