【发布时间】:2012-06-12 17:24:04
【问题描述】:
我有以下高阶函数:
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 已经是一个具有完全相同签名的非重载函数。
如 cmets 中所述,以下内容也有效,但仍无法解释在这种情况下类型推断失败的原因:
var isValidStr = LinqUtils.Not<string>(string.IsNullOrWhiteSpace);
【问题讨论】:
-
IsNullOrWhiteSpace 是一个方法组。方法组今天只有一个参与成员,但未来可能会更多。
标签: c# delegates functional-programming higher-order-functions anonymous-delegates