我有以下高阶函数:
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);