аргументы типа не могут быть выведены из использования функции высшего порядка

У меня есть следующая функция более высокого порядка:

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);
10
задан Grozz 12 June 2012 в 17:28
поделиться