我如何测试变量是C#中的变量类型?

时间:2012-10-07 19:33:14

标签: c# reflection

我想在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的作用,除了在某些类型比较中似乎需要的内容,因为IsInstanceOfTypeIsSubclassOf似乎无法正确匹配所有情况。

这是否真的是测试变量的最佳方法,是另一个变量引用的类型,还是我错过了一个更简单的语法?

2 个答案:

答案 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也是如此。