2016-04-09 22 views
0

Ben <T> MyGeneric bir sınıf ve <dize>, MyGeneric <int>, MyGeneric < çift > ... vbC# Açık genel tür karşılaştırması. Jenerik <>, Jenerik <T>'un "üst öğesi" dir?

yerde görmeyi belirli verileri kontrol etmek zorunda MyGeneric türünden oluşturulan bazı önbelleğe veri var o MyGeneric ise, böyle kod:

if (data is MyGeneric<>) { // can't compile 
    // ... do something 
} 

veya

if (data.GetType() == typeof(MyGeneric<>) 
    || typeof(MyGeneric<>).isAssginableFrom(data.GetType())) { 
    // no exception but none of these comparison works 
} 

veya bunu atmak istiyorum ama aptal Gerçekleştiren eserlerin bu tür:

if (data.GetType().Name.StartsWith(typeof(MyGeneric<>).Name) { ... } 

gerçek veri tipi ve açık genel tip arasındaki ilişkileri kontrol etmek için bir yol var mı (MyGeneric <>)?

cevap

2

açık genel türgenel tür tanımı olarak bilinir dediğimiz:

if(data.GetType().GetGenericTypeDefinition() == typeof(MyGeneric<>)) 
{ 

} 
İlgili konular