मैं निम्न विधि है:जेनरिक प्रकारों का अनुमान लगाने के लिए सी # कंपाइलर कैसे प्राप्त करें?
public TResult Get<TGenericType, TResult>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
अभी, इस पद्धति का एक उपयोगकर्ता इस तरह इसका इस्तेमाल करने की है:
//Notice the duplicate int type specification
int number = Get<SomeGenericType<int>, int>();
क्यों विधि defintion में TResult निर्दिष्ट करने के लिए मैं क्या ज़रूरत है? संकलक पहले से ही TResult जानता है क्योंकि मैंने इसे TGenericType में निर्दिष्ट किया है। आदर्श रूप में (यदि सी # संकलक एक छोटे से होशियार था), मेरे विधि इस प्रकार दिखाई देगा:
public TResult Get<TGenericType>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
तो उपयोगकर्ता बस इसे इस तरह इस्तेमाल कर सकते हैं:
//Much cleaner
int number = Get<SomeGenericType<int>>();
वहाँ ऐसा करने के लिए एक रास्ता है मुझे क्या करने का मन है?
मुझे लगता है कि प्रश्नोत्तरी से * बेवकूफ * जैसे कुछ क्वालीफायर हटाने से मदद मिलेगी। – EFraim
यह संकलक है जो बेवकूफ है, है ना? ;) मैंने अपर्याप्त टिप्पणी हटा दी। यह वास्तव में इसके बिना एक उचित सवाल है। –
चूंकि आपको उत्तर दिया गया है कि कुछ प्रकार के पैरामीटर का उपयोग करने का कोई तरीका नहीं है, शायद आप जो भी हासिल करना चाहते हैं उसके संदर्भ में आपको अपने प्रश्न को दोबारा सुधारना चाहिए। जैसा कि यह खड़ा है, आपका सवाल है "मैं सी # कंपाइलर संकलन कोड कैसे बना सकता हूं जो सी # भाषा की परिभाषा का उल्लंघन करता है?" इस प्रकार, इसे "वास्तविक प्रश्न नहीं" के रूप में बंद किया जाना चाहिए। –