Mam rodzajowego interfejsu takiego:Uzyskaj typ interfejsu ogólnego?
public interface IResourceDataType<T>
{
void SetResourceValue(T resValue);
}
Potem dostałem tej klasy, która implementuje mojego interfejsu:
public class MyFont : IResourceDataType<System.Drawing.Font>
{
//Ctor + SetResourceValue + ...
}
I wreszcie dostałam:
var MyType = typeof(MyFont);
I teraz , chcę uzyskać typ System.Drawing.Font
z MyType! Obecnie mam ten kod:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
//If test is OK
}
Ale nie udało się „wyodrębnić” moim typie tutaj ... Próbowałem kilka rzeczy z GetGenericArguments()
i innych rzeczy, ale oni albo don” t skompiluj lub zwróć wartość null/List ... Co muszę zrobić?
EDIT: Oto rozwiązanie, które pasuje do mojego kodu dla tych, którzy będą mieli ten sam problem:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
foreach (Type type in MyType.GetInterfaces())
{
if (type.IsGenericType)
Type genericType = type.GetGenericArguments()[0];
}
}
}
Czy widziałeś ten wpis: http://stackoverflow.com/questions/557340/c-sharp-generic-list-t-how-to-get-the-type-t-t –
Tak, i para innych, nie odpowiadają na moje pytanie ... Mam wrażenie, że muszę używać GetInterfaces() i robić inne rzeczy, próbuję tego! –