मैं निम्नलिखित उच्च क्रम समारोह है:प्रकार तर्क उच्च क्रम समारोह के लिए उपयोग से नहीं लगाया जा सकता
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);
[सी # 3.0 जेनेरिक प्रकार अनुमान के संभावित डुप्लिकेट - एक फ़ंक्शन पैरामीटर के रूप में एक प्रतिनिधि को पास करना] (http://stackoverflow.com/questions/407983/c-sharp-3-0-generic-type-inference-passing- एक-प्रतिनिधि-ए-ए-फ़ंक्शन-पैरामीटर) –
IsNullOrWhiteSpace एक विधि समूह है। विधि समूह में केवल एक भाग लेने वाला सदस्य है, लेकिन भविष्य में यह और अधिक हो सकता है। –