我正在寻找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
,但doesn't seem to be working:
var x = "asdf";
Console.WriteLine(x.GetType().IsAssignableFrom(typeof(object)));
Console.WriteLine(x is object);
答案 0 :(得分:5)
听起来你正在寻找IsAssignableFrom
:
type.IsAssignableFrom(value.GetType())
答案 1 :(得分:3)
是的,有更好的方法,你只需要扭转你的问题。而不是询问valueType是否是类型的子类,检查type是否可以从valueType分配。幸运的是,有人打电话要做到这一点,请参阅IsAssignableFrom