2012-12-10 40 views
15
के लिए एक संदर्भ प्रकार के रूप में मेल नहीं खाती

संभव डुप्लिकेट:
Nullable type as a generic parameter possible?क्यों Nullable <T> सामान्य बाधाओं

मैं सामान्य प्रकार की कमी के साथ एक बहुत अजीब बात बारे में जाना।

public SomeClass<T> where T:class 
{ 
} 

हालांकि, मैंने पाया मैं नल प्रकार का उपयोग नहीं कर सकते हैं के रूप में मैं उम्मीद थी:

new SomeClass<int?>(); 

मैं एक त्रुटि है कि int? एक संदर्भ होना चाहिए मिल मैं इस तरह एक वर्ग है प्रकार। क्या यह वास्तव में एक संदर्भ प्रकार की तरह दिखने के लिए सिंटैक्टिक चीनी के साथ एक संरचना है?

+2

उस बाधा का कारण क्या है? क्या आप अधिक संदर्भ प्रदान कर सकते हैं? एफवाईआई न्यूलबल को इस प्रकार घोषित किया गया है: 'सार्वजनिक संरचना नूलबल जहां टी: स्ट्रक्चर' –

+0

@ सिमॉन व्हाइटहेड मूल रूप से क्योंकि इस वर्ग के मूल्य प्रकारों का उपयोग अप्रत्याशित व्यवहार और बड़े प्रदर्शन प्रभाव – Earlz

+1

पर हो सकता है तो मुझे लगता है कि सीधे ऊपर जवाब है "हाँ, Nullable एक है struct "। मुझे यकीन नहीं है कि आप न्यूबल के लिए सिंटैक्टिक चीनी मानते हैं। ऐसा लगता है कि आपका एकमात्र विकल्प खुद को रोल करना है। –

उत्तर

20

Nullable<T> है एक struct (MSDN देखें) हालांकि यह केवल struct कि struct बाधा को पूरा नहीं करता है। इसलिए, यदि आप class या struct बाधाओं का उपयोग करते हैं तो आप एक सामान्य प्रकार पैरामीटर के रूप में Nullable का उपयोग नहीं कर सकते हैं।

Nullable<T> कुछ सिंथेटिक चीनी के साथ केवल एक संरचना नहीं है। इसके कुछ व्यवहार के लिए सीएलआर में इसका विशेष समर्थन है। उदाहरण के लिए, इसमें विशेष मुक्केबाजी व्यवहार है। विशेष रूप से, एक नालीबल कभी बॉक्स नहीं किया जाता है। अंतर्निहित मूल्य बॉक्स किया गया है। यदि नालीबल शून्य मान है (HasValue गलत है) तो इसे एक शून्य संदर्भ में परिवर्तित कर दिया जाता है। इसके अलावा, किसी भी Nullable<T> से Nullable<U> के लिए रूपांतरण ऑपरेटर T से U के रूपांतरणों से हटाए गए हैं। ये विशेषताएं हैं जिन्हें आप स्वयं को .NET 1.0/1.1 में लागू नहीं कर पाएंगे।