У меня есть следующая функция более высокого порядка:
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);