У меня есть следующая функция более высокого порядка:
public static Func<T, bool> Not<T>(Func<T, bool> otherFunc)
{
return arg => !otherFunc(arg);
}
И пытаясь так называть:
var isValidStr = LinqUtils.Not(string.IsNullOrWhiteSpace);
Компилятор дает мне "аргументы типа не могут быть выведены из ошибки использования". Но следующие работы:
var isValidStr = LinqUtils.Not((string s) => string.IsNullOrWhiteSpace(s));
Интересно, в чем разница?
string.IsNullOrWhiteSpace
уже является неперегруженной функцией с точно такой же сигнатурой.
Как упоминалось в комментариях, следующее также работает и до сих пор не объясняет, почему в этом случае не удается выполнить вывод типа:
var isValidStr = LinqUtils.Not<string>(string.IsNullOrWhiteSpace);