次の高階関数があります。
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);