का उदाहरण अगर मैं तुम्हें सही ढंग से समझ, आप Foo
वस्तुओं जो Output
रों के विभिन्न प्रकार की एक सूची, है ना? चूंकि ये आउटपुट विभिन्न प्रकार के होते हैं, इसलिए आपको यहां वैसे भी कास्ट करना होगा।
हालांकि, निम्न विचार मदद कर सकता है। कैसे के बारे में आप IFoo
नामक एक गैर सामान्य इंटरफ़ेस की घोषणा:
public interface IFoo
{
object Output { get; }
}
¹ और फिर अपने अमूर्त वर्ग में इसे लागू:
class Bar
{
List<IFoo> Foos;
}
:
abstract class Foo<T> : IFoo
{
abstract T Output { get; }
object IFoo.Output { get { return Output; } }
}
तो फिर तुम IFoo
रों की एक सूची घोषित कर सकते हैं
उन फ़ूज़ तक पहुंचने पर, आप या तो आउटपुट को इंटरफ़ेस के माध्यम से ऑब्जेक्ट के रूप में पुनर्प्राप्त कर सकते हैं:
var myObject = Foos[0].Output; // type ‘object’
या आप वास्तविक प्रकार की खोज के लिए यदि आप जानते हैं कि यह केवल कुछ विशिष्ट प्रकार के हो सकते हैं की कोशिश कर सकते हैं:
if (Foos[0] is Foo<string>)
var myString = ((Foo<string>) Foos[0]).Output; // type ‘string’
यहां तक कि आप उदाहरण के लिए, प्रकार के आधार पर छानने कार्य करें:
// Type ‘IEnumerable<string>’ (rather than ‘IEnumerable<object>’)!
var stringFoos = Foos.OfType<Foo<string>>().Select(f => f.Output);
¹ आप भी इस एक सार आधार Foo
बुलाया वर्ग बनाने के लिए और Foo<T>
यह से निकाले जाते हैं हो सकता है। उस स्थिति में, आपको को new
कीवर्ड के साथ चिह्नित करना होगा और सार आधार सदस्य तक पहुंचने के लिए base.Output
का उपयोग करना होगा।
सटीक अनुलिपि: http://stackoverflow.com/questions/353126/c-multiple-generic-types-in-one-list – GameZelda