10

मैं निम्नलिखित उच्च क्रम समारोह है:प्रकार तर्क उच्च क्रम समारोह के लिए उपयोग से नहीं लगाया जा सकता

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); 
+1

[सी # 3.0 जेनेरिक प्रकार अनुमान के संभावित डुप्लिकेट - एक फ़ंक्शन पैरामीटर के रूप में एक प्रतिनिधि को पास करना] (http://stackoverflow.com/questions/407983/c-sharp-3-0-generic-type-inference-passing- एक-प्रतिनिधि-ए-ए-फ़ंक्शन-पैरामीटर) –

+6

IsNullOrWhiteSpace एक विधि समूह है। विधि समूह में केवल एक भाग लेने वाला सदस्य है, लेकिन भविष्य में यह और अधिक हो सकता है। –

उत्तर

6

जिस मुद्दे से आप निपट रहे हैं उसका विवरण एरिक लिपपे द्वारा उत्तर दिया गया है अपने ब्लॉग पर आरटी, here

असल में, जैसा कि "डेविड बी" ने आपकी टिप्पणियों में कहा था, "IsNullOrWhiteSpace एक विधि समूह है। विधि समूह में केवल एक भाग लेने वाला सदस्य है, लेकिन यह भविष्य में और अधिक हो सकता है।"

+0

बहुत बढ़िया लिंक। प्रस्तावित कोड Wouuld सी # 4.0 में काम करेगा? var isValidStr = LinqUtils.Not (string.IsNullOrWhiteSpace); –

+1

नहीं, टाइपिंग अनुमान टाइप करने के लिए अपग्रेड केवल रिटर्न प्रकार के लिए काम करता है। – payo

+0

नहीं, यह सी # 4.0 में काम नहीं कर रहा है :(इसके अलावा, 's => string.IsNullOrWhiteSpace 'काम नहीं करता है या तो मुझे लगता है कि" विधि समूह "स्पष्टीकरण मान्य नहीं है। – Grozz

2

यह काम करता है:

var isValidStr = Not<string>(string.IsNullOrWhiteSpace); 

हालांकि, यह की तरह लगता है कंपाइलर के पास यहां पैरामीटर का अनुमान लगाने के लिए पर्याप्त जानकारी होनी चाहिए - और इसकी आवश्यकता नहीं होनी चाहिए ...

+0

मुझे पता है। यह अनिवार्य रूप से मेरे दूसरे भाग के समान ही है। मुझे आश्चर्य है कि क्यों प्रकार का अनुमान काम नहीं करता है। – Grozz

+0

सहमत हुए। बहुत अजीब। –