2012-12-23 9 views
6

Resharper चाहता था मुझे इस कोड को बदलने के लिए:खाली होने पर एक combobox के आइटम शून्य हैं?

foreach (var item in cmbxColor1.Items) 
{ 
    cmbxColor2.Items.Add(item); 
    . . . 

... क्योंकि यह कहा, "संभव 'System.NullReferencesException'"

तो यह इस होना चाहिए:

foreach (var item in cmbxColor1.Items) 
{ 
    if (null != cmbxColor2.Items) 
    { 
     cmbxColor2.Items.Add(item); 
. . . 

?

मुझे यह नहीं मिला - एक combobox के आइटम कैसे शून्य हो सकता है, जब तक शून्य == खाली नहीं? और यदि शून्य == खाली है, तो यह वही है जब वे इस कोड को कॉल करते हैं।

+2

क्या यह 'System.Windows.Forms.ComboBox' है? –

+0

@TrevorPilley: बढ़िया सवाल! प्रश्न इतिहास से ऐसा लगता है कि क्ले शैनन एक फोन ऐप विकसित कर रहा है, इसलिए मेरा अनुमान है कि यह 'System.Windows.Forms' नहीं है। हालांकि ओपी से पुष्टि प्राप्त करना अच्छा लगेगा। –

+0

यह एक विंडोज स्टोर ऐप है; यह मेरी सप्ताहांत परियोजना है; सप्ताहांत मैं ऐप्स के एक सूट (एक सी # विंडोज स्टोर ऐप और एक विंडोज फोन ऐप) पर काम कर रहा हूं। SO: यह विंडोज़-स्टोर-ऐप है। –

उत्तर

4

मुझे लगता है Resharper यहाँ गलत है, के रूप में ComboBox की Items संग्रह इसके निर्माता द्वारा प्रारंभ किया जा रहा है। यह है:

ComboBox c = new ComboBox(); 
c.Items.Add("1"); 

ठीक होने की गारंटी है।

इसके अलावा केवल get एक्सेसर हमारे लिए यहां उपलब्ध है ताकि कोई भी इस संग्रह को किसी अन्य (या null) से प्रतिस्थापित नहीं कर सके।हालांकि मुझे कोई यकीन नहीं है कि ComboBox (मुझे एक बार में smth नहीं मिल सका), जबकि मुझे लगता है कि यह अभी भी शून्य की गारंटी नहीं है, तो मुझे लगता है कि इस संग्रह को प्रभावित करने की संभावना थी।

0

मैं इस तरह का उपयोग करता हूं।

foreach (var item in cmbxColor1.Items) 
{ 
    if (cmbxColor2.Items.Count > 0) 
    { 
     cmbxColor2.Items.Add(item); 
    } 
} 
+2

यह बेहतर क्यों होगा? ओपी को वस्तुओं की गिनती की जांच करने की आवश्यकता नहीं है। उसे यह जांचने का सुझाव दिया जाता है कि 'cmbxColor2.Items' शून्य है, जबकि आपका कोड इस मामले में एक NullReferenceException फेंक देगा – horgh

+0

ठीक है, सुधार, यह बेहतर नहीं है कि आप सही हैं, मैं इस तरह का उपयोग करता हूं। – mohacs

3

शून्य खाली नहीं है।

रिशेर्पर टीम ने .NET कक्षाओं में से कई का स्वचालित कोड विश्लेषण किया है यह निर्धारित करने के लिए कि कौन सी विधियां और गुण शून्य हो सकते हैं। यदि रिशेर्पर का दावा है कि यह शून्य हो सकता है, तो शायद ऐसा इसलिए है क्योंकि कुछ रास्ता (शायद अस्पष्ट) है कि यह वास्तव में शून्य हो सकता है।

यदि आप बाहरी पुस्तकालय (उदा। mscorlib.dll) का उपयोग कर रहे हैं, तो यह गुणों का उपयोग करके अपनी इकाइयों के लिए अनुबंध निर्दिष्ट करने के लिए व्यवहार्य प्रतीत नहीं होता है। बाहरी एनोटेशन दर्ज करें। यह रेसर्पर सुविधा आपको रीशेर्पर के विश्लेषण इंजन द्वारा उपयोग की जाने वाली विशेषताओं वाले पहले से संकलित इकाइयों को पूरक करने की अनुमति देती है। बाहरी टिप्पणियां आपको इंजन को धोखा देती हैं, इसे विशेषताओं (विधियों, पैरामीटर और अन्य घोषणाओं के लिए) को देखते हुए जिन्हें पुस्तकालय संकलित किया गया था, घोषित नहीं किया गया था। ऐसा करने के लिए, गुण <ReSharper install directory>\Bin\ExternalAnnotations में स्थित XML फ़ाइल में निर्दिष्ट किए जाने चाहिए।

रीशेर्पर स्थापित होने पर इस फ़ोल्डर में संग्रहीत मानक पुस्तकालयों के लिए अनुबंध की परिभाषा ऐसी परिभाषा है। ये अनुबंध स्रोत कोड विश्लेषण के साथ-साथ माइक्रोसॉफ्ट अनुबंधों के आधार पर प्राप्त किए जाते हैं। पूर्व तकनीक का उपयोग करके प्राप्त अनुबंधों को *.Generated.xml के प्रकारों में संग्रहीत किया जाता है, जबकि बाद की तकनीक का उपयोग करने वाले लोगों को *.Contracts.xml के प्रकार में संग्रहीत किया जाता है।

हालांकि मैं मानता हूं कि यह null अभ्यास में होने की संभावना नहीं है। यह भी हो सकता है कि Resharper सतर्क हो गया है - यह साबित करना कि क्या कुछ कभी शून्य हो सकता है या नहीं, एक कठिन समस्या है। यदि आप सोचते हैं कि विश्लेषण गलत है और इसे सही करना चाहते हैं तो आप एनोटेशन को संशोधित कर सकते हैं।

संबंधित

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