2016-04-09 5 views
0

J'ai une classe MyGeneric <T> et des données mises en cache créées à partir du type MyGeneric < chaîne >, MyGeneric <int>, MyGeneric < à double > ... etc.C# Comparaison de type générique ouvert. Generic <> est "parent" du générique <T>?

Quelque part je dois vérifier certaines données pour voir si elle est MyGeneric, je code comme ceci:

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

ou

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

ou ce genre de travaux de implemention stupides mais je voudrais jeter:

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

Y at-il un moyen de vérifier les relations entre le type de données réelles et type générique ouvert (MyGeneric <>)?

Répondre

2

Ce que vous appelez type générique ouvert est connu comme définition de type générique:

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

}