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!是的,的确。。我在发布之前搜索了它(但显然还不够…)。道歉!是的,的确。。我在发布之前搜索了它(但显然还不够…)。道歉!