public class TestBase
{
    // implementation
}
public class Test : ICollection<TestBase>
{
    // implementation
}

Где-то еще у меня есть свойство типа Test:

public Test Test {get;set;}

Как я могу получить базовый тип ICollection, от которого наследуется тест?

1
Alex 17 Апр 2016 в 03:39

4 ответа

Лучший ответ

Вероятно, вы ищете GetGenericArguments().

var type = typeof(Test);
var collInterface = type.GetInterfaces()[0];
var generic = collInterface.GetGenericArguments()[0];
3
Toxantron 17 Апр 2016 в 01:06

Пусть x будет экземпляром класса, реализующего интерфейсы. Вы можете получить его типы iterface следующим образом:

var type = x.GetType();
var interfaces = type.GetInterfaces();

Изменить: у меня был неправильный вопрос: выполните «GetGenericArguments ()», как было предложено.

0
FunkyPeanut 17 Апр 2016 в 01:13

Метод GetInterfaces возвращает все реализованные интерфейсы в текущем типе, а его метод GetGenericArguments возвращает список общих аргументов, из которых вы можете получить его базовый тип с помощью свойства BaseType. этот пример возвращает иерархию классов универсального аргумента базового интерфейса реализовано в текущем классе:

Var myType = this.GetType (). GetInterfaces (). First (). GetGenericArguments (). First (); а (myType! = null)
{
Console.WriteLine (myType.Name);
myType = myType.BaseType;
}

0
mehrdad safa 17 Апр 2016 в 02:11
 Type t = typeof(Test);
 MethodInfo mi = t.GetMethod("MyMethod");
 Type returnvalue = mi.ReturnType;
 Type answer = Nullable.GetUnderlyingType(returnvalue);

Я надеюсь, что это помогает.

-1
TJ Riceball 17 Апр 2016 в 00:49