如何测试变量是否属于C#中的变量类型?

如何测试变量是否属于C#中的变量类型?,c#,reflection,C#,Reflection,我想在C#中执行以下操作: C#似乎不支持这种语法;“is”右侧的项似乎必须是绝对类型名,而不是对类型的引用 我发现以下代码似乎有效: return _someVar.GetType().IsInstanceOfType(type) || _someVar.GetType().IsSubclassOf(type) || _SomeVar.GetType().IsAssignableFrom(type); 我不明白IsAssignableFrom有什么作用,只是在某些类型比较中似

我想在C#中执行以下操作:

C#似乎不支持这种语法;“is”右侧的项似乎必须是绝对类型名,而不是对类型的引用

我发现以下代码似乎有效:

return _someVar.GetType().IsInstanceOfType(type) ||
    _someVar.GetType().IsSubclassOf(type) ||
    _SomeVar.GetType().IsAssignableFrom(type);
我不明白
IsAssignableFrom
有什么作用,只是在某些类型比较中似乎需要它,因为
IsInstanceOfType
issubclasssof
似乎不能正确匹配所有情况


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

IsAssignableFrom
就足够了,不需要另外两个测试,但你称它为错误的方法。以下是正确的方法:

public bool ValidType(Type type)
{
    return type.IsAssignableFrom(_someVar.GetType());
}
我不明白IsAssignableFrom做什么


实际上,它完全按照名称告诉您的那样做:它测试给定类型的变量是否可以从另一类型的值赋值。

正如Konrad提到的
IsAssignableFrom
对于您的测试来说就足够了

确定是否可以从指定类型的实例分配当前类型的实例。


您不需要另外两个检查,因为在这些情况下,
IsAssignableFrom
也将为真。

始终存在
typeof
运算符和
as
keyword@Dan-o、 “as”与“is”存在相同的问题,因为它只能与类型名一起使用。typeof()不会透露_someVar是否是类型的派生类型的实例。谢谢您的更正。抱歉,这不是真的,我需要其他的。IsAssignableFrom仅当“type”是_someVar的类型时返回true。如果它是_someVar的父类型,则返回false。我需要与“is”完全相同的功能,它也适用于父类型。@David啊,你需要反转参数!啊,我应该仔细看看你的代码。我没有想到要做type.IsAssignableFrom(),我一直在做_someVar.IsAssignableFrom()。这确实满足了我的需要。非常感谢。
public bool ValidType(Type type)
{
    return type.IsAssignableFrom(_someVar.GetType());
}