मूल्य प्रकार डेटाटाइप पर निरर्थक ऑपरेटर को लागू करके क्या बदला जाता है जो अब यह शून्य स्टोर कर सकता है।? (शून्य) ऑपरेटर सी #
उत्तर
जैसा कि अन्य ने कहा है, "?" इसे Nullable<T>
में बदलने के लिए सिर्फ शॉर्टेंड है। यह एक अन्य मूल्य प्रकार है जो एक बूलियन ध्वज के साथ कहता है कि वास्तव में एक उपयोगी मूल्य है या नहीं, या यह प्रकार के लिए शून्य मान है या नहीं। वास्तविक कोड में
public struct Nullable<T>
{
private readonly bool hasValue;
public bool HasValue { get { return hasValue; } }
private readonly T value;
public T value
{
get
{
if (!hasValue)
{
throw new InvalidOperationException();
}
return value;
}
}
public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}
// Calling new Nullable<int>() or whatever will use the
// implicit initialization which leaves value as default(T)
// and hasValue as false.
}
जाहिर है वहाँ अधिक तरीकों (जैसे GetValueOrDefault()
) और रूपांतरण ऑपरेटरों आदि सी # संकलक ऑपरेटरों जो प्रभावी रूप से प्रॉक्सी उठाया मूल करने के लिए कहते हैं कर रहे हैं: दूसरे शब्दों में, Nullable<T>
इस तरह एक सा लग रहा है T
के लिए ऑपरेटरों।
टूटी हुई रिकॉर्ड की तरह लगने के जोखिम पर, यह अभी भी एक मूल्य प्रकार है। यह मुक्केबाजी नहीं शामिल है ... और आप लिखते हैं जब:
int? x = null;
कि एक अशक्त संदर्भ नहीं है - यह Nullable<int>
के शून्य मान है, यानि कि एक जहाँ hasValue
false
है।
जब एक नल प्रकार बॉक्सिंग है, CLR एक सुविधा है जिससे मान न तो कोई अशक्त संदर्भ के लिए बॉक्सिंग हो जाता है, या एक सादे टी बॉक्सिंग तो अगर आप इस तरह कोड है:
int? x = 5;
int y = 5;
object o1 = x;
object o2 = y;
o1
और o2
द्वारा निर्दिष्ट बॉक्स किए गए मान अलग-अलग हैं। आप यह नहीं बता सकते कि मुक्केबाजी का नतीजा एक नतीजा है। चीनी के लिए
?
वाक्यविन्यास Nullable<T>
संरचना के लिए वाक्य रचनात्मक चीनी है।
संक्षेप में, जब आप int? myNullableInt
लिखते हैं, तो संकलक इसे Nullable<int> myNullableInt
में बदल देता है।
MSDN से ("Nullable प्रकार अवलोकन" के लिए नीचे स्क्रॉल):
वाक्य रचना टी? Nullable के लिए shorthand है, जहां टी एक मूल्य प्रकार है। दो रूपों में अंतर-परिवर्तनीय हैं।
मूल शब्दों में, एक शून्य प्रकार सामान्य प्रकार का एक बॉक्स वाला संस्करण होता है जिसमें अतिरिक्त बूलियन फ़ील्ड होता है जिसे उस पर हैवल्यू कहा जाता है। जब यह फ़ील्ड गलत पर सेट है, तो उदाहरण शून्य है।
CLR कार्यान्वयन पर थोड़ा और विस्तार, और क्यों वे इसे चुना है हो सकता है के लिए इस उत्तर चेक आउट: Boxing/Unboxing Nullable Types - Why this implementation?
नहीं, यह बिल्कुल एक बॉक्स संस्करण नहीं है। यह अभी भी एक मूल्य प्रकार है। –
मैं इसे एक बॉक्सिंग संस्करण नहीं कहूंगा। बॉक्सिंग एक मान प्रकार का एक संदर्भ प्रकार प्रतिनिधित्व बनाता है। Nullable
क्या यह एक Nullable प्रकार के हुआ करते थे प्रकार बदल जाता है।
यदि आप किसी पूर्णांक था, और यह एक पूर्णांक ?:int myInt;
बनाने का फैसला किया
और आप इसे बनाने:
int? myInt;
यह अब है:
Nullable<int> myInt;
में वास्तविकता।
मूल्य प्रकार पर कुछ भी नहीं बदला गया है, यह बस System.Nullable<T>
संरचना में लपेटा गया है। http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
- 1. सी # ?? शून्य coalescing ऑपरेटर LINQ
- 2. ऑपरेटर शून्य * और ऑपरेटर बूल
- 3. सी ++ शून्य कास्ट और ऑपरेटर कॉमा #define
- 4. शून्य ऑपरेटर की कार्यक्षमता()()
- 5. सी # में Coalesce ऑपरेटर?
- 6. सी ++ ऑपरेटर + और ऑपरेटर + = अधिभार
- 7. ऑपरेटर [] [] सी ++
- 8. ऑपरेटर सी ++
- 9. ऑपरेटर = सी ++
- 10. ऑपरेटर सी
- 11. सी के Atomicity # वालों ऑपरेटर
- 12. सी # और ऑपरेटर नल जांच
- 13. हटाएं बनाम ऑपरेटर हटाएं (और शून्य पॉइंटर)
- 14. ऑपरेटर प्राथमिकता (शून्य * बूल से पहले?)
- 15. सी # ?? नल कोलेसिंग ऑपरेटर प्रश्न
- 16. सी ++ में ऑपरेटर -> * ऑपरेटर क्या है?
- 17. सी ++ 0x में ऑपरेटर क्यों है ... ऑपरेटर?
- 18. असाइन रिक्त स्ट्रिंग केवल तभी चर शून्य (त्रिगुट ऑपरेटर)
- 19. + = सी # में नल प्रकार के साथ ऑपरेटर
- 20. सी # ऑपरेटर स्पष्टीकरण
- 21. अजगर सी ++ ऑपरेटर ओवरलोडिंग
- 22. सी ++ ऑपरेटर == अधिक भार
- 23. सी ++ shared_ptr समानता ऑपरेटर
- 24. सी ++ टाइपिड ऑपरेटर
- 25. क्या सी # ऑपरेटर है?
- 26. सी # '?' क्या है ऑपरेटर
- 27. ऑपरेटर -> सी ++
- 28. सी अल्पविराम ऑपरेटर
- 29. ऑपरेटर ओवरलोडिंग सी ++
- 30. टेम्पलेटेड ऑपरेटर() अधिभार सी ++
आपको बहुत बहुत धन्यवाद। –