C# 检查对象是否属于泛型类
我已经定义了一个泛型类C# 检查对象是否属于泛型类,c#,generics,C#,Generics,我已经定义了一个泛型类MultiSlot 在某些情况下,我想检查对象是否属于此类型(即类型MultiSlot),但不是特定类型T。基本上,我想要的是MultiSlotl的所有对象输入某个if子句,而不管它们的具体T(假设它们都属于T的某个子类) 一个指示性(但错误!)语法是:if(obj是MultiSlot) 有办法吗?看看 : 简短答复: public static bool IsSubclassOfRawGeneric(Type generic, Type toCheck)
MultiSlot
在某些情况下,我想检查对象是否属于此类型(即类型MultiSlot
),但不是特定类型T
。基本上,我想要的是MultiSlotl
的所有对象输入某个if
子句,而不管它们的具体T
(假设它们都属于T
的某个子类)
一个指示性(但错误!)语法是:if(obj是MultiSlot)
有办法吗?看看
:
简短答复:
public static bool IsSubclassOfRawGeneric(Type generic, Type toCheck)
{
while (toCheck != null && toCheck != typeof(object))
{
var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
if (generic == cur)
return true;
toCheck = toCheck.BaseType;
}
return false;
}
看看
:
简短答复:
public static bool IsSubclassOfRawGeneric(Type generic, Type toCheck)
{
while (toCheck != null && toCheck != typeof(object))
{
var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
if (generic == cur)
return true;
toCheck = toCheck.BaseType;
}
return false;
}
您可以使用以下方法:
public bool IsMultiSlot(object entity)
{
Type type = entity.GetType();
if (!type.IsGenericType)
return false;
if (type.GetGenericTypeDefinition() == typeof(MultiSlot<>))
return true;
return false;
}
请注意,对于子类的实例(即StringMultiSlot:MultiSlot
),这将返回false
)您可以使用如下方法:
public bool IsMultiSlot(object entity)
{
Type type = entity.GetType();
if (!type.IsGenericType)
return false;
if (type.GetGenericTypeDefinition() == typeof(MultiSlot<>))
return true;
return false;
}
请注意,对于子类的实例(即
StringMultiSlot:MultiSlot
),这将返回false
)一种不太复杂的方法:
var type = obj.GetType();
var isMultiSlot = type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof (MultiSlot<>);
var type=obj.GetType();
var isMultiSlot=type.IsGenericType&&
type.GetGenericTypeDefinition()==typeof(多批次);
但是,这对于从
多批继承的类型不起作用。一种不太复杂的方法:
var type = obj.GetType();
var isMultiSlot = type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof (MultiSlot<>);
var type=obj.GetType();
var isMultiSlot=type.IsGenericType&&
type.GetGenericTypeDefinition()==typeof(多批次);
但是,这对于从多批继承的类型不起作用。请在复制/粘贴时使用另一个答案。您完全正确@Eren Ersönmez。。。对不起,错误已更正。我只是不知道如何再次找到它。。。好吧,我真该试试StackOverflow搜索引擎!我的道歉是的,它工作得很好,谢谢!复制/粘贴时请输入另一个答案。你完全正确@Eren Ersönmez。。。对不起,错误已更正。我只是不知道如何再次找到它。。。好吧,我真该试试StackOverflow搜索引擎!我的道歉是的,它工作得很好,谢谢!我认为添加“while”循环(在前面的答案中)可以使代码适用于继承的类型。Thnx!是的,另一篇文章中的版本更好。我认为“while”循环添加(在前面的答案中)使代码适用于继承的类型。Thnx!是的,另一篇文章中的版本更好。我认为“while”循环的添加(在第一个答案中)使代码适用于子类。Thnx!我假设“while”循环加法(在第一个答案中)使代码能够为子类工作。Thnx!是的,的确。。我在发布之前搜索了它(但显然还不够…)。道歉!是的,的确。。我在发布之前搜索了它(但显然还不够…)。道歉!