2012-01-29 9 views
8

रखरखाव कोड पर एक दुःस्वप्न बन जाता है जो एक मूल्य प्रकार के एक शून्य प्रकार की अनुमति देता है? मुझे एहसास है कि int?Nullable<int> के बराबर है, लेकिन मेरा प्रश्न इसकी उपयोगिता की दिशा में अधिक तैयार है। हम मूल्य प्रकार देखते हैं और स्वाभाविक रूप से उन्हें null की अनुमति नहीं देते हैं। लेकिन Nullable<T> को प्रश्न चिह्न के शॉर्टेंड के साथ लाकर, यह स्पष्ट है कि यह क्या करता है लेकिन हमेशा ध्यान देने योग्य नहीं होता है।मूल्य प्रकार के साथ Nullable <T> का उपयोग करने के लिए खराब अभ्यास?

उन सुविधाओं है कि केवल आपके क्योंकि कि यह, इसका मतलब यह नहीं कर सकते हैं चाहिए में से एक है?

वरीयता क्या होनी चाहिए? मान प्रकार का डिफ़ॉल्ट मान (यानी int SomeConfigOption = -1;) या Nullable<T> (यानी int? SomeConfigOption;) का उपयोग करना?

+0

'Nullable ' केवल * * मूल्य प्रकारों के साथ उपयोग किया जाना था। आप पूछ रहे हैं कि 'Nullable ' सामान्य रूप से हानिकारक माना जाना चाहिए। – Cameron

+0

@ कैमरॉन मुझे लगता है कि मेरा शब्द थोड़ा अस्पष्ट था। और जटिलता को जोड़कर, जरूरी नहीं कि सीधे हानिकारक हो। –

+1

जो भी आप करते हैं, एक स्ट्रक्चर न लिखें और फिर इसके साथ 'Nullable ' का उपयोग करें। मैं दूसरे दिन उत्पादन कोड में आया, संदर्भ के चारों ओर इसे पारित करने के साथ पूरा (जैसा कि यह व्यवहार्य था)। बस इसे एक वर्ग बनाओ! – TrueWill

उत्तर

11

वरीयता क्या होनी चाहिए? किसी मान प्रकार का डिफ़ॉल्ट मान (यानी int SomeConfigOption = -1;) या Nullable का उपयोग (यानी int? SomeConfigOption;)?

इस मामले में स्पष्ट रूप से आप Nullable<T> चाहते जब भी आप मामले आप अभाव एक मूल्य के के लिए खाते में करने के लिए है कि है। -1 जैसे जादू संख्याएं बहुत खराब रखरखाव दुःस्वप्न हैं।

यह सी # भाषा की मुख्य विशेषता है, क्योंकि अन्य सुविधाओं के साथ इसका दुरुपयोग किया जा सकता है लेकिन यह स्पष्ट लाभ भी प्रदान करता है - ये लाभ किसी भी समस्या से कहीं अधिक है जो किसी भाषा में कुशल नहीं है, स्रोत कोड पढ़ने का समय हो सकता है गति तक पहुंचने के लिए।

+2

ठीक है, मुझे वह जवाब पसंद है। लेकिन यह क्यों है कि ढांचा स्वयं इसका उपयोग नहीं करता है?उदाहरण के लिए, किसी चयनित आइटम पर अक्सर 'चयनित इंडेक्स' को '-1' का मान होता है जब कोई चयनित आइटम नहीं होता है। क्यों एमएसएफटी उस के लिए 'Nullable ' का उपयोग नहीं करना चाहेंगे ?? यह मेरे इंजन में एक रिंच फेंकता है। –

+2

क्योंकि एनईएलई 2.0 –

+0

@ हंसपैसेंट परंपरा के लिए संरक्षण के लिए न्यूलबल उपलब्ध नहीं था? –

0

मैं एक डिफ़ॉल्ट मान के साथ एक मूल्य प्रकार के लिए एक शून्य प्रकार को पसंद करता हूं (जिसे डेवलपर का मतलब शून्य है)। मुझे कोड में और समस्याएं मिली हैं जहां डिफ़ॉल्ट मानों का अर्थ कुछ भी नहीं है।

2

मुझे लगता है कि नालीबल अच्छा दिखता है: नलबल प्रकार वाले कोड काफी स्वयं-दस्तावेज हैं।

उदाहरण:

int? someConfigOption; 
if (someConfigOption.HasValue) 
{ 
    // Use someConfigOption.Value property. 
} 
else 
{ 
    // Value is absent. 
} 

एक और काम दृष्टिकोण:

int value = someConfigOption.GetValueOrDefault(); 
बेशक

, विधियों जो Nullable मान लेने के रूप में अपने मापदंडों अच्छी तरह से प्रलेखित होना चाहिए।

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