2011-12-27 11 views
6

क्या एमएसडीएन दस्तावेज़ों से सी # में यह संभव है कि कुछ विधि/संपत्ति/फ़ील्ड शून्य मूल्य वापस नहीं कर सकता है?सुनिश्चित करें कि संपत्ति शून्य नहीं हो सकती

उदा। MSDN से Image.RawFormat संपत्ति का कहना है:

ImageFormat है कि इस छवि का फ़ाइल स्वरूप का प्रतिनिधित्व करता है।

क्या यह शून्य हो सकता है? क्या मुझे अपने कोड में ऐसी शून्य जांच करनी चाहिए या यह हमेशा शून्य नहीं है?

+0

क्या आप इसका जिक्र कर रहे हैं: http://msdn.microsoft.com/en-us/library/system.drawing.image.rawformat.aspx? – zmbq

+0

कोड अनुबंध इस तरह की चीज के लिए अच्छे हैं। – Amy

+0

और एमएसडीएन किस कोड अनुबंध का उपयोग करता है? –

उत्तर

4

मुझे विश्वास है कि किसी भी इनपुट मान (यानी आपके कोड द्वारा प्रदान नहीं किया गया) के लिए आपको सत्यापन जांच करनी चाहिए। यहां तक ​​कि यदि आप एमएसडीएन में देखते हैं कि यह null वापस नहीं लौटा सकता है, तो यह भविष्य में बदल सकता है और यह वैसे भी एक अच्छा अभ्यास है।

+0

लेकिन अगर मैं ऐसा करूँगा तो मुझे कम कोड कवरेज मिलेगा! नहीं है? –

+0

मुझे इस धागे पर "निचला कोड कवरेज" के उपयोग को समझने में याद आती है। जहां तक ​​मुझे पता है, यह वाक्यांश, आपके कोड में किए गए परीक्षण के स्तर का जिक्र कर रहा है। जैसे "आप कितने संभावित परिदृश्यों को कवर करते हैं?"। वैसे भी यह आपके कोड को सुरक्षित बनाएगा। एकमात्र नीचे की ओर आप नुकसान का प्रदर्शन कर रहे हैं, लेकिन शायद यह इतना कम है कि यह मापनीय नहीं होगा। –

+0

हां, आप मुझे सही ढंग से समझते हैं। जब मैं कुछ कोड कवरेज टूल चलाता हूं तो यह मापता है कि मेरा कोड कितना अच्छा है (कुछ xUnit ढांचे के साथ) - इसलिए यदि मैं मृत कोड प्राप्त करूंगा जो कभी भी नहीं बुलाया जाएगा और परीक्षण के लिए उपलब्ध नहीं होगा तो मैं कुछ कवरेज पर्सेंट खो दूंगा। –

1

मुझे नहीं लगता कि दस्तावेज से बताने के लिए गारंटी है, लेकिन आमतौर पर यह कह सकता है कि यह शून्य हो सकता है। उदाहरण के लिए, यदि आप System.Windows.Documents.Inline.NextInline के लिए दस्तावेज़ को देखो, यह कहते हैं:

एक इनलाइन वस्तु अगले इनलाइन तत्व एक सहकर्मी इस तत्व के लिए, या रिक्त है कि अगर कोई अगले इनलाइन तत्व है प्रतिनिधित्व।

भले ही, यदि आपके प्रोग्राम एक null मूल्य नहीं संभाल कर सकते हैं और आप एक संदर्भ प्रकार का एक उदाहरण है, तो आप अभी भी उचित सत्यापन null के लिए क्या करना चाहिए।

+0

अफसोस की बात है, आप एमएसडीएन के बारे में क्या कह रहे हैं हमेशा लागू नहीं होता है। उदाहरण के लिए http://msdn.microsoft.com/en-us/library/ पर उदाहरण देखें system.windows.application.current (v = vs.95) .aspx। बेशक यह समझ में आता है कि संपत्ति गैर-WPF अनुप्रयोग में शून्य है, लेकिन यह स्पष्ट रूप से वहां नहीं बताया गया है। –

+0

@ MatějZábský: हाँ, दस्तावेज़ीकरण नहीं है इस बारे में स्पष्ट होने की गारंटी है। ऐसा लगता है कि अगर यह शून्य की संभावना का उल्लेख करने के लिए पर्याप्त "महत्वपूर्ण" (या सामान्य) है, तो यह वहां होगा। – bobbymcr

1

Resharper आपको ऑब्जेक्ट का उपयोग करने पर चेतावनी देगा जो शून्य नहीं साबित किया जा सकता है (उदाहरण के लिए NotNull विशेषता को देखकर, या देखकर कि बुलाया गया तरीका स्वयं की जांच करता है) - और फिर अविभाज्य रूप से आपको चेक जोड़ने के लिए ऑफ़र करता है एक क्लिक या दो के साथ।

इस तरह आप चेक के साथ अपने कोड को कूड़े हुए से बच सकते हैं जहां आवश्यक नहीं है।

इसके अलावा, अक्सर Debug.Assert का उपयोग करना "असंभव-लेकिन-क्या-अगर" चेक करने के लिए पर्याप्त है (जहां आपको कोड जो कुछ भी कर रहा है उसे समाप्त करना होगा)।

+0

यहां तक ​​कि सी # कंपाइलर आपको चेतावनी देगा, उदाहरण के लिए 'int i = null'। – abatishchev

+1

लेकिन यह आपको "ऑब्जेक्ट ओ = नल; स्ट्र एस = ओ। टॉस्ट्रिंग()" जैसी स्थिति में चेतावनी नहीं देगा, जो ओपी पूछ रहा है। –

0

यह सुनिश्चित करने का कोई तरीका नहीं है कि एक शून्य प्रकार null वापस नहीं आएगा, हालांकि, कोड परिवर्तनों के संदर्भ में ढांचा स्थिर है, मैं यह देखकर एक सूचित निर्णय लेगा कि आप कैसे संपत्ति या विधि हैं कॉलिंग ILSpy या JustDecompile का उपयोग करके काम करता है।

आपके उदाहरण में यह दिखाई देगा कि null को वापस नहीं किया जा सका क्योंकि ImageFormat के निर्माता के रूप में Guid स्वीकार करता है और इसे एक निजी क्षेत्र में निर्दिष्ट करता है।

  1. यह एक StatusException प्रॉपर्टी एक्सेस पर फेंक दिया नहीं है:

    क्या आप संपत्ति के साथ क्या कर रहे हैं पर निर्भर करता है इसके लायक जाँच हो सकता है।

  2. ImageFormat वह प्रारूप है जो आप उम्मीद कर रहे हैं क्योंकि यह एक छवि प्रारूप का प्रतिनिधित्व कर सकता है कि न तो GdiPlus या .NET "जागरूक" है।
संबंधित मुद्दे

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