2010-06-30 10 views
11

This MSDN reference इंगित करता है कि जब int? (या कोई Nullable<T>) का मान होता है, तो यह हमेशा एक बॉक्स होता है (और इसलिए int से स्मृति-वार, डेटा की एक बहुत ही कम कुशल स्टोर)। क्या यह मामला है?सी # int हैं? और बूल? हमेशा होता है जब hasvalue = सच?

उत्तर

11

यह पृष्ठ उस समय से संदर्भित करता है जब आप Nullable<T> संरचना मुक्केबाजी कर रहे हैं, न कि संरचना के अंदर मूल्य।

int? a = 42; // no boxing 
int? n = null; // no boxing 

object nObj = n; // no boxing 
object aObj = a; // only now will boxing occur 

यह व्यवहार जब एक नियमित रूप से मान प्रकार (शून्य मामले से निपटने के अपवाद के साथ मुक्केबाजी से अलग नहीं है:

कोई मुक्केबाजी एक नल प्रकार के भंडारण में शामिल जब तक आप व्यर्थ ही मुक्केबाजी की कोशिश भी नहीं है) तो यह वास्तव में उम्मीद की जा रही है।

2

ऐसा नहीं है। Nullable<T> सामान्य है, इसलिए यह वास्तविक int या bool रखता है।

एमएसडीएन पृष्ठ इस बात के बारे में बात कर रहा है कि जब आप Nullable<int> या Nullable<bool> बॉक्स करते हैं तो क्या होता है। यदि आप कभी भी object वैरिएबल पर अपनी नलिका संरचना को असाइन नहीं करते हैं, तो आप मुक्केबाजी ओवरहेड नहीं ले पाएंगे।

2

नहीं। नालीबल वस्तु एक सामान्य संरचना है, और आंतरिक रूप से मुक्केबाजी के बिना टी के मूल्य को संभालती है।

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