我想在C#中执行以下操作:
public bool ValidType(Type type)
{
return _someVar is type;
}
C#似乎不支持这种语法; “是”右侧的项目似乎必须是绝对类型名称,而不是对类型的引用。
我发现以下代码似乎有效:
return _someVar.GetType().IsInstanceOfType(type) ||
_someVar.GetType().IsSubclassOf(type) ||
_SomeVar.GetType().IsAssignableFrom(type);
我不明白IsAssignableFrom
的作用,除了在某些类型比较中似乎需要的内容,因为IsInstanceOfType
和IsSubclassOf
似乎无法正确匹配所有情况。
这是否真的是测试变量的最佳方法,是另一个变量引用的类型,还是我错过了一个更简单的语法?
答案 0 :(得分:4)
IsAssignableFrom
就足够了,不需要其他两个测试,但是你的方法是错误的。这是正确的方法:
public bool ValidType(Type type)
{
return type.IsAssignableFrom(_someVar.GetType());
}
我不明白IsAssignableFrom的作用
实际上,它完全按照名称告诉你的内容:它测试给定类型的变量是否可以从另一种类型的值中赋值。
答案 1 :(得分:1)
正如康拉德所说,IsAssignableFrom
足以让你进行测试。
确定是否可以从指定类型的实例分配当前Type的实例。
http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
您不需要另外两个检查,因为在这些情况下,IsAssignableFrom
也是如此。