2014-09-11 5 views
16

किसी को भी जानता है का उपयोग करते हुए एक पूर्णांक चर घोषित बीच कोई अंतर मौजूद है:मतभेद = 0

var i = default(int) 

बनाम

var i = 0; 

हो सकता है कि एक छोटे से प्रदर्शन अंतर या अन्य मतभेद?

सभी को धन्यवाद!

+2

कोई अलग कोर्स नहीं है। पठनीय कोड लिखें, सुनिश्चित करें कि प्रोग्रामर का विशाल बहुमत स्पष्ट 0 उपयोग का पक्ष लेता है। –

उत्तर

17

प्रभावी रूप से, कोई अंतर नहीं है। MSDN

टाइप पैरामीटर का डिफ़ॉल्ट मान निर्दिष्ट करता है। संदर्भ प्रकारों के लिए यह शून्य और मूल्य प्रकारों के लिए शून्य होगा।

int एक मान प्रकार है, इसलिए 0.

को मैं एक बहुत अधिक पठनीय इसकी के रूप में स्पष्ट 0 काम प्रदर्शन करेंगे अभिव्यक्ति का समाधान हो जाएगा।

+0

उत्तर के लिए धन्यवाद दोस्त –

1

कार्यक्षमता के मामले में, नहीं, 0int टाइप करने के लिए डिफ़ॉल्ट मान नहीं है।

प्रदर्शन के संदर्भ में, मुझे पूरा यकीन है कि default(int) संकलन समय के दौरान 0 द्वारा प्रतिस्थापित किया गया है, इसलिए संकलन समय के दौरान केवल मामूली प्रदर्शन हिट हो सकती है, लेकिन रनटाइम नहीं।

0

भविष्य में एक और कारक हो सकता है यदि संकलक में (डिफ़ॉल्ट) परिभाषा बदल दी गई है तो आपकी परियोजना टूट सकती है।

+0

मुझे नहीं लगता कि int का डिफ़ॉल्ट मान कभी भी बदल जाएगा। – Mephy

+0

आप निश्चित रूप से सही हैं। हालांकि, आप धारणा के साथ जा रहे हैं इसलिए मैं हूं। कोई वैज्ञानिक चर्चा नहीं है।मुझे याद है कि सी भाषा के लिए डिफ़ॉल्ट मान कुछ और होता था - 32767? – codebased

1

दोनों के बीच कोई अंतर नहीं है।
सी # में विभिन्न स्थितियों के लिए सुविधाएं उपलब्ध कराई गई हैं। यह उनके पीछे तर्कसंगत कारणों के बावजूद सभी परिस्थितियों में उनका उपयोग नहीं करता है।
उदाहरण के लिए सामान्य जेनेरिक वर्गों में सामान्य है क्योंकि जेनेरिक कक्षाओं और विधियों में, एक मुद्दा उत्पन्न होता है कि पैरामीटर प्रकार टी को डिफ़ॉल्ट मान असाइन करना है, जब आप पहले से नहीं जानते हैं।
यद्यपि आप इसे प्राचीन प्रकार के साथ int जैसे उपयोग कर सकते हैं, लेकिन आपको ऐसा करने का सुझाव नहीं दिया जाता है, इसका अस्तित्व का पूरा कारण कुछ और है।
बाद वाले का उपयोग करें क्योंकि यह अधिक पठनीय और तार्किक है।
तुम भी this link on default

22

को देखने के लिए चाहते हो सकता है यहाँ var i = default(int) कोड के लिए आईएल है:

IL_0001: ldc.i4.0  
IL_0002: stloc.0  // i 

यहाँ var i = 0; कोड के लिए आईएल है:

IL_0001: ldc.i4.0  
IL_0002: stloc.0  // i 

यह की तरह लगता है व्यक्तिगत करने पर निर्भर करता वरीयता।

+1

इसके अलावा 'var i = new int()' समान है। –