确定对象是特定类型还是派生自特定类型

本文关键字:类型 派生 对象 | 更新日期: 2023-09-27 18:29:00

我正在寻找is运算符,除了类型操作数(右侧)是动态的。

public static bool Is(this object value, Type type)
{      
  if (type == null) throw new ArgumentNullException(type, "type");
  if (value == null) return false;
  var valueType = value.GetType();
  return valueType == type || valueType.IsSubclassOf(type)
    || valueType implements interface
}

有没有更简单的方法?

我试过使用IsAssignableFrom,但似乎不起作用:

var x = "asdf";
Console.WriteLine(x.GetType().IsAssignableFrom(typeof(object)));
Console.WriteLine(x is object);

确定对象是特定类型还是派生自特定类型

听起来你在寻找IsAssignableFrom:

type.IsAssignableFrom(value.GetType())

是的,有更好的方法,你只需要扭转你的问题。与其询问valueType是否是类型的子类,不如检查类型是否可从valueType赋值。幸运的是,有一个调用可以做到这一点,请参阅IsAssignableFrom