Сравнение универсальных типов интерфейса - PullRequest
1 голос
/ 02 декабря 2011

Мне нужно определить, является ли объект типа IDictionary<string, string> IDictionary<,>, и у меня возникают проблемы с правильной логикой сравнения.

Я пробовал следующее:

typeof(IDictionary<string, string>)
       .GetInterface(typeof(IDictionary<,>).Name);

и

typeof(IDictionary<string, string>)
       .GetGenericTypeDefinition()
       .GetInterface(typeof(IDictionary<,>).Name);

Вызов typeof(Dictionary<string,string>).GetInterface(comparisonType.Name) возвращает ожидаемый ненулевой результат, но если я сравниваю тип IDictionary<string,string>, GetInterface() возвращает ноль.Аналогично, сравнение с GenericTypeDefinition также возвращает ноль.

Ответы [ 2 ]

8 голосов
/ 02 декабря 2011
typeof(IDictionary<string, string>).GetGenericTypeDefinition() == typeof(IDictionary<,>)
3 голосов
/ 02 декабря 2011
static void Main(string[] args)
    {
        var x = typeof(IDictionary<string, string>);
        var y = typeof(IDictionary<,>);

        Console.WriteLine(x.GetGenericTypeDefinition() == y);
    }

возвращает истину

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...