将open generic参数与open generic interface type进行比较

时间:2015-09-24 11:53:39

标签: c# generics reflection

是否可以(在c#中)比较开放的通用参数,例如T in:

public void CompareMethod<T>() { ... }

具有开放通用接口(或类)的类型?
这是一个示例界面:

public interface IExample<T> { }

然后在方法中以某种方式比较它们:

public void CompareMethod<T>()
{
    if (typeof(IExample<>) == typeof(T))
    {
        //execute
    }
}

当调用这样的方法时,if正文将不会执行:

CompareMethod<IExample<object>>();

重要我事先并不知道将在CompareMethod的开放通用参数中输入哪些封闭类型。

1 个答案:

答案 0 :(得分:1)

您需要致电GetGenericTypeDefinition()上的T才能将其与IExample<>进行比较:

public void CompareMethod<T>()
{
    if (typeof(T).IsGenericType && 
        typeof(T).GetGenericTypeDefinition() == typeof(IExample<>)) {
    {
        //execute
    }
}