2009-02-27 13 views
19

मेरे पास एक साधारण संरचना है जिसका उपयोग सीमित है। संरचना एक विधि में बनाई गई है जो डेटाबेस से डेटा को कॉल करती है। यदि डेटाबेस से कोई डेटा वापस नहीं किया गया है, तो मैं एक शून्य वापस करने में सक्षम होना चाहता हूं, लेकिन विजुअल स्टूडियो शिकायत करता है, पैकेज को नाम में परिवर्तित नहीं कर सकता है। संरचना नाम क्योंकि यह एक गैर-शून्य मूल्य प्रकार है।एक गैर-शून्य मूल्य प्रकार बनाने योग्य

मैं इसे कैसे बेकार कर सकता हूं?

उत्तर

22

आप Nullable<T> मूल्य प्रकार में देखना चाहते हैं।

10
public struct Something 
{ 
    //... 
} 

public static Something GetSomethingSomehow() 
{ 
    Something? data = MaybeGetSomethingFrom(theDatabase); 
    bool questionMarkMeansNullable = (data == null); 
    return data ?? Something.DefaultValue; 
} 
+1

जहां तक ​​मैं समझता हूं, यह कोड शून्य नहीं लौटाता है क्योंकि मालफिस्ट चाहता है। –

+0

आईआईआरसी, इसका उद्देश्य शून्य प्रकारों के उपयोग के उदाहरण के रूप में किया गया था, क्योंकि पोस्टर को यह समझ में नहीं आया कि वे वास्तव में क्या थे। – mquander

+0

'डिफ़ॉल्ट (कुछ)' उस स्थिति में एक बेहतर डिफ़ॉल्ट वापसी मान हो सकता है कि कोई मान मौजूद नहीं है। –

3

Nullable<T> एक आवरण वर्ग कि प्रकार टी तुम भी वाक्य रचना टी का उपयोग कर सकते की एक नल संस्करण बनाता है? (? जैसे पूर्णांक) प्रकार टी के नल संस्करण का प्रतिनिधित्व करने के

6

एक Nullable<T> struct के लिए परिभाषा है:

Nullable<PackageName.StructName> nullableStruct = new Nullable<PackageName.StructName>(params); 

आप शॉर्टकट कर सकते हैं:

struct Nullable<T> 
{ 
    public bool HasValue; 
    public T Value; 
} 

यह इस तरह से बनाई गई है बस यह टाइप करके यह गड़बड़:

PackageName.StructName? nullableStruct = new PackageName.StructName(params); 

देखें: MSDN

1

आप कुछ इस तरह, उदाहरण के लिए नल कर सकता है:

// Create the nullable object. 
int? value = new int?(); 

// Check for if the object is null. 
if(value == null) 
{ 
    // Your code goes here. 
} 
1

उपयोग में निर्मित शॉर्टकट Nullable<T> struct के लिए, बस घोषणा करने के लिए ? जोड़कर:

int? x = null; 

if (x == null) { ... } 

बस किसी भी अन्य प्रकार, संरचना, आदि के लिए समान

MyStruct? myNullableStruct = new MyStruct(params); 
,210
0

आप एक वैकल्पिक

public struct VelocityRange 
{ 
    private double myLowerVelocityLimit; 
    private double myUpperVelocityLimit; 
} 

VelocityRange velocityRange = डिफ़ॉल्ट (VelocityRange) के रूप में डिफ़ॉल्ट उपयोग कर सकते हैं;