J'ai obtenu une interface générique comme ceci:Obtenir le type d'une interface générique?
public interface IResourceDataType<T>
{
void SetResourceValue(T resValue);
}
Je suis arrivé cette classe qui implémente mon interface:
public class MyFont : IResourceDataType<System.Drawing.Font>
{
//Ctor + SetResourceValue + ...
}
Et finalement je me suis un:
var MyType = typeof(MyFont);
I, maintenant , vous voulez obtenir le type System.Drawing.Font
de MyType! Au moment, je me suis ce code:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
//If test is OK
}
Mais je ne parviennent pas à « extraire » mon type ici ... J'ai essayé quelques choses avec GetGenericArguments()
et d'autres choses, mais soit ils n » t compiler ou renvoyer une valeur nulle/Liste ... Que dois-je faire?
EDIT: Voici la solution qui correspondent à mon code pour ceux qui se le même problème:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
foreach (Type type in MyType.GetInterfaces())
{
if (type.IsGenericType)
Type genericType = type.GetGenericArguments()[0];
}
}
}
Avez-vous vu ce post: http://stackoverflow.com/questions/557340/c-sharp-generic-list-t-how-to-get-the-type-of-t –
Yep, et un couple d'autres, ils ne répondent pas à ma question ... Mon sentiment est que je dois utiliser GetInterfaces() et faire d'autres choses, je l'essaie en fait! –