检查通用类型

时间:2014-01-17 15:32:34

标签: c# generics

检查通用类型时遇到一些问题。

让我们假设您有一个这样的列表:

public class List<T>
{

}

在那里你想检查T是什么类型,所以你这样:

private void CheckType()
{
    if (typeof(T) == typeof(CustomItem))
    {

    }
}

现在我面临着具有通用接口的类的问题,我想检查泛型是否是接口,例如:

public interface ICustomItem
{

}

public class CustomItemA : ICustomItem
{

}

public class CustomItemB : ICustomItem
{

}

现在我想对两个类进行类型检查,并且只使用接口:

private void CheckType()
{
    if (typeof(T) == typeof(ICustomItem))
    {

    }
}

这显然失败了,因为类型不是ICustomItem,而是CustomItemA或CustomItemB。 已经找到了一个获取接口的方法,但我不认为这是正确的方法:

private void CheckType()
{
    if (typeof(T).GetInterface("ICustomItem") != null)
    {

    }
}

希望你能帮助我。

Ps。:不,我不想创建T的实例,只需使用运算符。

2 个答案:

答案 0 :(得分:4)

我怀疑你正在寻找Type.IsAssignableFrom

if (typeof(ICustomItem).IsAssignableFrom(typeof(T)))

答案 1 :(得分:1)

最好的选择是IsAssignableFrom() ...

if (typeof(T).IsAssignableFrom(typeof(ICustomItem))) { }

您也可以这样做,这与您找到的内容基本相同,除非没有字符串比较...

if (typeof(T).GetInterfaces().Contains(typeof(ICustomItem))) { }