जवाबों:
इसका अर्थ है कि प्रश्न में मूल्य प्रकार एक अशक्त प्रकार है
अशक्त प्रकार System.Nullable संरचना के उदाहरण हैं। एक अशक्त प्रकार अपने अंतर्निहित मूल्य प्रकार, और एक अतिरिक्त शून्य मान के लिए मूल्यों की सही सीमा का प्रतिनिधित्व कर सकता है। उदाहरण के लिए, एक
Nullable<Int32>
, "Int32 के Nullable" का उच्चारण, -2147483648 से 2147483647 तक किसी भी मूल्य को सौंपा जा सकता है, या इसे शून्य मान सौंपा जा सकता है। ANullable<bool>
को सही, गलत या अशक्त मान सौंपा जा सकता है। जब आप डेटाबेस और अन्य डेटा प्रकारों के साथ काम कर रहे होते हैं, तो ऐसे न्यूमेरिक और बूलियन प्रकारों को अशक्त करने की क्षमता विशेष रूप से उपयोगी होती है जिसमें ऐसे तत्व होते हैं जिन्हें मान नहीं सौंपा जा सकता है। उदाहरण के लिए, एक डेटाबेस में एक बूलियन क्षेत्र मूल्यों को सही या गलत संग्रहीत कर सकता है, या यह अपरिभाषित हो सकता है।class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
int
प्रकार और एक संबंधित Integer
वर्ग है, उदाहरण के लिए।
यह एक आशुलिपि है Nullable<int>
। Nullable<T>
का उपयोग एक मान प्रकार को सेट करने की अनुमति देने के लिए किया जाता है null
। मूल्य प्रकार आमतौर पर शून्य नहीं हो सकते ।
value types
शून्य नहीं हो सकता। यदि आप विशेष रूप से एक मूल्य निर्दिष्ट किए बिना एक इंट या बूल (जो मूल्य प्रकार हैं) घोषित करते हैं, तो उनके पास अभी भी मूल्य (0 और गलत, क्रमशः) होंगे, अर्थात। वे अशक्त नहीं होंगे। सौंपे नहीं गए reference types
, इस तरह के वस्तु या MyClass के रूप में, दूसरे हाथ पर, अशक्त हो जाएगा। आप मूल्य प्रकार और संदर्भ प्रकारों के बीच अंतर पर पढ़ना चाह सकते हैं।
में
x ? "yes" : "no"
? अगर एक वाक्य की घोषणा करता है । यहाँ: एक्स बूलियन स्थिति का प्रतिनिधित्व करता है; पहले भाग : है तो सजा और भाग के बाद है बाकी की सजा।
उदाहरण के लिए,
int?
? एक अशक्त प्रकार घोषित करता है, और इसका अर्थ है कि इसके पहले का प्रकार अशक्त मान हो सकता है।
return value ? value : "isNull";
मुझे बताता है कि यह string value
बूल में परिवर्तनीय नहीं है।
अशक्त प्रकार System.Nullable संरचना के उदाहरण हैं। एक अशक्त प्रकार अपने अंतर्निहित मूल्य प्रकार, और एक अतिरिक्त अशक्त मूल्य के लिए मूल्यों की सामान्य सीमा का प्रतिनिधित्व कर सकता है । उदाहरण के लिए, एक [
Nullable<Int32>
], जिसका उच्चारण "Nullable of Int32," को -2147483648 से 2147483647 तक किसी भी मूल्य को सौंपा जा सकता है, या इसे शून्य मान सौंपा जा सकता है। A [Nullable<bool>
] को सही या गलत या शून्य मान दिया जा सकता है। डेटाबेस और अन्य डेटा प्रकार के तत्वों से निपटने के लिए विशेष रूप से उपयोगी है जो कि एक मान निर्दिष्ट नहीं किया जा सकता है। उदाहरण के लिए, एक डेटाबेस में एक बूलियन क्षेत्र मूल्यों को सही या गलत संग्रहीत कर सकता है, या यह अपरिभाषित हो सकता है।
यह घोषणा करता है कि प्रकार अशक्त है।
व्यावहारिक उपयोग:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
ऊपर दिए गए उत्तरों को जोड़ने के लिए, यहां एक कोड नमूना है
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
यह एक संकलन त्रुटि देगा:
त्रुटि 12 शून्य को 'टेस्ट' में नहीं बदल सकती क्योंकि यह एक गैर-अशक्त मान प्रकार है
ध्यान दें कि NullableTest के लिए कोई संकलन त्रुटि नहीं है। (ध्यान दें? टी 2 की घोषणा में)
int?
के लिए आशुलिपि है Nullable<int>
। दो रूप विनिमेय हैं।
Nullable<T>
एक ऑपरेटर है जिसे आप T
इसे स्वीकार करने के लिए एक मूल्य प्रकार के साथ उपयोग कर सकते हैंnull
।
आप यह पता नहीं है मामले में: मूल्य प्रकार प्रकार है कि के रूप में मान स्वीकार कर रहे हैं int
, bool
,char
आदि ...
वे मानों के संदर्भों को स्वीकार नहीं कर सकते हैं: यदि आप उन्हें संदर्भ प्रकारों केnull
विपरीत असाइन करते हैं , तो वे एक संकलन-समय त्रुटि उत्पन्न करेंगे , जो स्पष्ट रूप से इसे स्वीकार कर सकते हैं।
आपको इसकी आवश्यकता क्यों होगी? क्योंकि कभी-कभी आपके वैल्यू टाइप वैरिएबल से कुछ ऐसे रिटर्न दिए जा सकते हैं, जो किसी डेटाबेस द्वारा लौटाए गए लापता या अपरिभाषित वेरिएबल की तरह बहुत अच्छे से काम नहीं करते।
मैं आपको Microsoft दस्तावेज़ीकरण पढ़ने का सुझाव देता हूं क्योंकि यह विषय को काफी अच्छी तरह से कवर करता है।