2010-12-01 12 views
7

पृष्ठभूमि: यह डेवलपर सिद्धांत है "क्या मेरा फ़ंक्शन शून्य हो सकता है या अनुरोध किया गया आइटम मौजूद नहीं होने पर अपवाद फेंकना चाहिए?" कि मैं यहां चर्चा नहीं करना चाहूंगा। मैंने उन सभी मामलों के लिए अपवाद फेंकने का फैसला किया जिन्हें मूल्य वापस करना है और यह मान केवल (प्रोग्रामेटिक या तार्किक रूप से) अमान्य अनुरोध के मामलों में मौजूद नहीं होगा।सी #: घोषित करें कि कोई फ़ंक्शन कभी वापस नहीं आएगा?

और अंत में मेरे सवाल: मैं इतना है कि संकलक जानता है कि यह शून्य वापस कभी नहीं होगा और किसी को भी करता है, तो वापसी मान रिक्त है जो की जाँच करता है चेतावनी दी है एक समारोह को चिह्नित कर सकते हैं?

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/484571/how-can-i-show- वह-ए-विधि-इच्छा-कभी-वापसी-नल-डिज़ाइन-बाय-कॉन्ट्रैक्ट-इन-सी) –

+0

इसके अलावा: http://stackoverflow.com/questions/792531/c-how-to-implement-and-use -a-notnull-and-canbenull-विशेषता –

+0

ओह, मैंने उन्हें नहीं देखा, हालांकि मैं देख रहा था (स्पष्ट रूप से पर्याप्त कठिन नहीं) – MatthiasG

उत्तर

7

आप Code Contracts का उपयोग कर ऐसा कर सकते हैं।

उदाहरण:

public String Method1() 
    { 
     Contract.Ensures(Contract.Result<String>() != null); 

     // To do 
    } 
+0

धन्यवाद, ऐसा लगता है कि मैं क्या देख रहा हूं। बॉक्स समाधान से बाहर एक .NET अच्छा होगा लेकिन यह सामान्य तरीका प्रतीत होता है (कोड अनुबंधों के लिए सलाह की संख्या को देखते हुए)। – MatthiasG

+1

कम से कम यह .NET 4 –

+2

पर बॉक्स से बाहर है, ठीक है, यह बॉक्स समाधान से बाहर है। यह आधिकारिक तौर पर नेट 4.0 का हिस्सा है। – decyclone

0

यदि आप कोई मान प्रकार वापस करते हैं, तो यह शून्य नहीं हो सकता है (जब तक कि आप इसे स्पष्ट रूप से सिस्टम 'शून्य' रैपर का उपयोग करके नहीं बनाते)।

3

देख रहे संहिता संविदा का उपयोग करके आप एक अनुबंध है कि एक विधि अशक्त वापस नहीं करता है परिभाषित कर सकते हैं।

using System.Diagnostics.Contracts; // required namespace 

public T MethodName() 
{ 
    Contract.Ensures(Contract.Result<T>() != null); //where T is the return type. 

    // method body... 
} 
की [मैं दिखा सकते हैं कैसे है कि एक विधि लौट अशक्त कभी नहीं होगा सी # में (अनुबंध द्वारा डिजाइन)] (
संबंधित मुद्दे