检查通用类型时遇到一些问题。
让我们假设您有一个这样的列表:
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的实例,只需使用是运算符。
答案 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))) { }