मुझे एक सामान्य प्रकार मिला है:यह कोड "जेनेरिक टाइप परिभाषा की धैर्य" के बारे में क्यों शिकायत करेगा?
class DictionaryComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
और एक कारखाना विधि जो किसी दिए गए शब्दकोश प्रकार के लिए इस वर्ग का एक उदाहरण बनायेगी (चाहिए)।
private static IEqualityComparer<T> CreateDictionaryComparer<T>()
{
Type def = typeof(DictionaryComparer<,>);
Debug.Assert(typeof(T).IsGenericType);
Debug.Assert(typeof(T).GetGenericArguments().Length == 2);
Type t = def.MakeGenericType(typeof(T).GetGenericArguments());
return (IEqualityComparer<T>)Activator.CreateInstance(t);
}
सभी अपर्याप्त सामानों को दूर करना - यहां तक कि यह कोड भी एक ही अपवाद फेंकता है।
private static object CreateDictionaryComparer()
{
Type def = typeof(DictionaryComparer<,>);
Type t = def.MakeGenericType(new Type[] { typeof(String), typeof(object) });
return Activator.CreateInstance(t);
}
आवेषण पास करते हैं इसलिए मुझे पता है कि T
सामान्य है और इसमें दो सामान्य तर्क हैं। Xzx46 के साथ लाइन हालांकि इसके साथ समाप्त होती है:
प्रदान किए गए सामान्य तर्कों की संख्या जेनेरिक प्रकार परिभाषा की समानता के बराबर नहीं है।
पैरामीटर नाम: तात्कालिकता
मैंने अतीत में इस तरह की चीज की है और मेरे जीवन के लिए यह पता नहीं लगा सकता कि यह इस मामले में क्यों काम नहीं कर रहा है। (प्लस मुझे Google arity था)।
आप 'टी' के रूप में 'createDictionaryComparer' के रूप में क्या गुजर रहे हैं? मैंने 'CreateDictionaryComparer>()' को पारित करने का प्रयास किया है और यह मेरे लिए ठीक काम करता है (मोनो सी # कंपाइलर संस्करण 1.9.1.0 का उपयोग करके)। –
मेरे पास शब्दकोशकंपर एक आंतरिक वर्ग के रूप में था जो स्वयं सामान्य है। सोचो कि काम को खो रहा था। – dkackman
जिज्ञासा से बाहर, क्या आप पूर्ण (असफल) नमूना प्रदान कर सकते हैं ताकि मैं इसे अपने कंपाइलर पर आज़मा सकूं? –