दुर्भाग्य से, विशिष्ट टी कार्यान्वयन के बारे में संकलक को मनाने के लिए बहुत मुश्किल है। एक (बुरा) दृष्टिकोण (इस पर ध्यान दें बॉक्स और Unbox मूल्य-प्रकार होगा) बीच में आपत्ति उठाने कास्ट करने के लिए है:
int i = (int)(object)this.value;
i++;
this.value = (T)(object)i;
बदसूरत, लेकिन यह काम करता है। .NET 3.5 में मेरे पास जेनेरिक अंकगणितीय, here के लिए कुछ बेहतर रैपर हैं। ऑपरेटर वर्ग MiscUtil का हिस्सा है; सरलतम स्तर पर, मुझे लगता है AddAlternative बहुत अच्छी तरह से काम करेगा:
this.value = Operator.AddAlternative(this.value, 1);
यह अंतर्निहित < टी यह निष्कर्ष निकाल देना चाहिए, स्वचालित रूप से > int, या आप उन्हें अपने आप को जोड़ सकते हैं:
this.value = Operator.AddAlternative<T,int>(this.value, 1);
लाभ: यह मूल कोड के लिए बेहतर है क्योंकि यह वास्तव में मूल टी के बारे में परवाह नहीं करता है - यह किसी भी प्रकार (यहां तक कि स्वयं का) भी काम करेगा जो "टी + (टी, इंट)" का समर्थन करता है।
मुझे लगता है कि वहाँ भी एक ChangeType वहाँ में कहीं आसपास छिपा ...
[संपादित करें] कोलिन कश्मीर और दूसरों वास्तु प्रभाव के बारे में एक वैध टिप्पणी कर - लेकिन व्यावहारिक जा रहा है कई बार जब टी वास्तव में करता है इससे कोई फर्क नहीं पड़ता ... लेकिन मैं वास्तव में आवश्यक होने तक इस प्रकार की विशेषज्ञता से बचने के लिए सहमत हूं। उस ने कहा (कॉलिन की पोस्ट पर मेरी टिप्पणी के अनुसार), मूल अंकगणित (वृद्धि, इंट 32 डिवीजन, आदि) जैसी चीजों को करने की क्षमता (उदाहरण के लिए) मैट्रिक्स < टी > [टी के लिए दशमलव/फ्लोट/int/double/आदि] अक्सर अत्यधिक मूल्यवान है।
स्रोत
2008-10-05 20:51:06
यह काम नहीं करता है, संकलक यह निर्धारित करने में असमर्थ है कि उपयोग करने के लिए ToInt32 अधिभार। – AnthonyWJones
हां, यह ठीक काम करता है। इसे वीएस में पेस्ट करें और इसे आजमाएं। – user25306