मैं निम्नलिखित मामलों के बीच अंतर करना चाहते हैं:जेनेरिक की कमी है, जहां टी: struct और जहां टी: वर्ग
- एक सादे मान प्रकार (जैसे
int
) - एक नल मान प्रकार (जैसे
int?
) - एक संदर्भ प्रकार (जैसे
string
) - वैकल्पिक रूप से, मुझे परवाह नहीं है अगर यह करने के लिए मैप किया गया (1) या (2) ऊपर
मैं निम्नलिखित सी के साथ आए हैं स्तोत्र, जो मामलों के लिए ठीक काम करता है (1) और (2):
static void Foo<T>(T a) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
हालांकि, अगर मैं मामले का पता लगाने की कोशिश करते हैं (3) इस तरह, यह संकलन नहीं करता है:
static void Foo<T>(T a) where T : class { } // 3
त्रुटि संदेश टाइप करें 'एक्स' पहले से ही पैरामीटर प्रकार के साथ 'फू' नामक एक सदस्य को परिभाषित करता है। खैर, किसी भी तरह से मैं where T : struct
और where T : class
के बीच कोई अंतर नहीं बना सकता।
अगर मैं तीसरे समारोह (3) निकालने के लिए, निम्न कोड या तो संकलन नहीं करता है:
int x = 1;
int? y = 2;
string z = "a";
Foo (x); // OK, calls (1)
Foo (y); // OK, calls (2)
Foo (z); // error: the type 'string' must be a non-nullable value type ...
मैं कैसे प्राप्त कर सकते हैं Foo(z)
संकलित करने के लिए, ऊपर कार्यों में से एक (या एक तिहाई से एक के लिए यह मानचित्रण एक और बाधा के साथ, जिसे मैंने नहीं सोचा है)?
संदर्भ प्रकारों के लिए है: नई(), लेकिन इस नल मूल्य प्रकार के साथ अजीब व्यवहार है। –