तो निम्न विधि है पर जाँच:प्रकार Nullable <int>
static void DoSomethingWithTwoNullables(Nullable<int> a, Nullable<int> b)
{
Console.WriteLine("Param a is Nullable<int>: " + (a is Nullable<int>));
Console.WriteLine("Param a is int : " + (a is int));
Console.WriteLine("Param b is Nullable<int>: " + (b is Nullable<int>));
Console.WriteLine("Param b is int : " + (b is int));
}
जब मैं एक पैरामीटर के रूप अशक्त के साथ इस विधि कॉल, प्रकार की जांच इस पैरामीटर के लिए झूठी देता है। उदाहरण के लिए इस कोड को
DoSomethingWithTwoNullables(5, new Nullable<int>());
इस उत्पादन में परिणाम:
Param a is Nullable<int>: True
Param a is int : True
Param b is Nullable<int>: False
Param b is int : False
जब एक Nullable का उपयोग करने और अशक्त गुजर वहाँ प्रकार की जानकारी को बचाने के लिये कोई तरीका है? मुझे पता है कि इस उदाहरण में प्रकार की जांच बेकार है, लेकिन यह समस्या को दर्शाती है। मेरी प्रोजेक्ट में, मैं पैरामीटर को दूसरी विधि में पास करता हूं जो params object[]
सरणी लेता है और ऑब्जेक्ट्स के प्रकार की पहचान करने का प्रयास करता है। इस विधि को Nullable<int>
और Nullable<long>
के लिए अलग-अलग चीजें करने की आवश्यकता है।
क्योंकि बी को पहले 'int' के लिए बॉक्स किया गया है जिसके परिणामस्वरूप शून्य संदर्भ होता है। – usr
संभवतः आप इसका परीक्षण करने के लिए {} पकड़ {} का प्रयास कर सकते हैं, इसलिए पता लगाने का एक तरीका है। मैं प्रतिबिंब का उपयोग कर शर्त लगाता हूं कि आप इसे एक कदम आगे ले सकते हैं और इसे पॉलिश कर सकते हैं। हो सकता है कि एक नया उदाहरण शुरू करें, जिसे इसे एक डिफ़ॉल्ट मान देना चाहिए, और 'typeof (variable.value)' करना चाहिए? – NibblyPig
@ एसएलसी: आप नहीं कर सकते। यह प्रकार की जानकारी के बिना सिर्फ एक शून्य संदर्भ है। – usr