比较通用接口类型

时间:2011-12-02 19:36:47

标签: c# .net reflection types

我需要检测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)会返回预期的非null结果,但如果我在IDictionary<string,string>类型上进行比较,则GetInterface()将返回null。同样,在GenericTypeDefinition上进行比较也会返回null。

2 个答案:

答案 0 :(得分:8)

typeof(IDictionary<string, string>).GetGenericTypeDefinition() == typeof(IDictionary<,>)

答案 1 :(得分:3)

static void Main(string[] args)
    {
        var x = typeof(IDictionary<string, string>);
        var y = typeof(IDictionary<,>);

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

返回true