我有以下高階函數:類型參數不能從使用的高階函數推斷
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);
[C#3.0泛型類型推斷 - 將委託作爲函數參數傳遞]的可能重複(http://stackoverflow.com/questions/407983/c-sharp-3-0-generic-type-inference-passing- a-delegate-as-a-function-parameter) –
IsNullOrWhiteSpace是一個方法組。方法小組今天只有一個參與成員,但未來可能會有更多。 –