2

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

public bool ValidType(Type type)
{
    return _someVar is type;
}

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

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

return _someVar.GetType().IsInstanceOfType(type) ||
    _someVar.GetType().IsSubclassOf(type) ||
    _SomeVar.GetType().IsAssignableFrom(type);

我不明白做什么IsAssignableFrom,除了在某些类型比较中似乎需要它并且似乎IsInstanceOfType不能IsSubclassOf正确匹配所有情况。

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

4

2 回答 2

4

IsAssignableFrom就足够了,不需要其他两个测试,但是您将其称为错误的方式。这是正确的方法:

public bool ValidType(Type type)
{
    return type.IsAssignableFrom(_someVar.GetType());
}

我不明白 IsAssignableFrom 的作用

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

于 2012-10-07T19:35:48.460 回答
1

正如 Konrad 所提到IsAssignableFrom的,对于您的测试来说已经足够了。

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

http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx

您不需要其他两项检查,因为在这些情况下,IsAssignableFrom这也是正确的。

于 2012-10-07T19:37:33.917 回答