2009-03-15 24 views
47

मेरे पास एक विधि पर एक 'वैकल्पिक' पैरामीटर है जो एक KeyValuePair है। मैं एक अधिभार कि इस पैरामीटर के लिए कोर विधि के लिए अशक्त गुजरता है चाहता था, लेकिन मूल विधि, जब मैं जाँच करना चाहते हैं, तो KeyValuePair रिक्त है में, मैं निम्नलिखित त्रुटि मिलती है:ऑब्जेक्ट की तुलना शून्य से कैसे की जा सकती है?

Operator '!=' cannot be applied to operands of type System.Collections.Generic.KeyValuePair<string,object>' and '<null>. 

मैं कैसे नहीं किया जा सकता यह जांचने की अनुमति है कि कोई ऑब्जेक्ट शून्य है या नहीं?

+0

क्या आप एक कोड नमूना दे सकते हैं जो इस त्रुटि को दिखाता है? –

+2

यह भी देखें: http://stackoverflow.com/questions/1335419/how-can-i-make-sure-that-firstordefaultkeyvaluepair-has-returned-a-value –

उत्तर

78

KeyValuePair<K,V> एक वर्ग है, एक वर्ग नहीं है। यह कर की तरह है:

int i = 10; 
if (i != null) ... 

(हालांकि कि वास्तव में कानूनी, एक चेतावनी के साथ, अजीब नल रूपांतरण नियमों की वजह से है महत्वपूर्ण बिट है कि if हालत सही नहीं होगा।।)

यह बनाने के लिए "वैकल्पिक", आप निरर्थक रूप का उपयोग कर सकते हैं:

static void Foo(KeyValuePair<object,string>? pair) 
{ 
    if (pair != null) 
    { 
    } 
    // Other code 
} 

ध्यान दें? KeyValuePair<object,string>?

+1

धन्यवाद, कभी भी मेरे दिमाग को पार नहीं किया गया है जो एक संरचना थी। ओह! – ProfK

+4

"(i! = Null)" चेतावनी उत्पन्न करता है, लेकिन दुख की बात है कि उपयोगकर्ता द्वारा परिभाषित मान प्रकार के लिए ऐसी कोई चेतावनी नहीं है जो एमएसडीएन दिशानिर्देशों के अनुसार बराबर/== /! = ओवरलोड करता है। जब मैं "स्ट्रक्चर फू" लागू करता हूं तो बहुत भ्रमित होता है और मेरा ग्राहक अपेक्षा करता है कि "अगर (someFoo! = Null)" यह जांचने का उचित तरीका है कि कुछ फ़ू के पास कोई मान है या नहीं। :-p – yoyo

7

क्योंकि KeyValuePair संरचना (एक मान प्रकार) है, आप केवल संदर्भ प्रकारों पर नल की तुलना कर सकते हैं।

मुझे लगता है कि आपने अभी तक अतिरिक्त अधिभार नहीं लिखा है। जब आप keyValuePair के मान के रूप में शून्य को पारित करने का प्रयास करते हैं तो यह असफल हो जाएगा।

3

KeyValuePair < के, वी > एक संरचना है और इसलिए किसी भी परिस्थिति में शून्य नहीं हो सकती है। केवल एक संदर्भ प्रकार शून्य हो सकता है।

यदि आप गलत मान पकड़ने की कोशिश कर रहे हैं तो आपको व्यक्तिगत रूप से कुंजी और मूल्य सदस्यों को सत्यापित करना होगा।

-8

आप वास्तव में KeyValuePair.IsNull() का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि KeyValuePair सेट किया गया है या नहीं।

+0

आप KeyValuePair.IsNull() कहां प्राप्त कर रहे हैं? एक विस्तार विधि? – Mark

12

मैं अपनी उम्र के बावजूद इस का जवाब दे रहा हूँ क्योंकि यह "परीक्षण keyvaluepair शून्य पर"

जवाब निर्दिष्ट सही है के लिए 1 गूगल परिणाम है, लेकिन यह पूरी तरह से, कम से कम एक समस्या का उत्तर न मिले मैं था, जहां मुझे KeyValuePair के अस्तित्व की जांच करने की आवश्यकता है और Dictionary की दूसरी जांच पर जाएं यदि यह मेरी अपेक्षा की तरह मौजूद नहीं है।

पद्धति का उपयोग करना ऊपर क्योंकि संकलक KeyValuePair<>? की KeyValuePair.Value हो रही पर chokes, तो यह default(KeyValuePair<>) का उपयोग करने के रूप में इस सवाल + उत्तर में देखा बेहतर है मेरे लिए काम नहीं किया। The default for KeyValuePair

संबंधित मुद्दे

 संबंधित मुद्दे