2012-10-07 99 views
2

我想要做这样的事情在C#中的以下内容:如何测试变量是否是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做,除了它似乎需要一些类型比较为IsInstanceOfTypeIsSubclassOf似乎并不匹配所有情况都适当。

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

+0

总是有'typeof'运算符和'as'关键字 –

+0

感谢编辑Tim :) –

+0

@ Dan-o,“as”与“is”有同样的问题,因为它只能用于与类型名称。 typeof()将不会显示_someVar是否是派生类型的实例。 –

回答

4

IsAssignableFrom就足够了,不需要另外两个测试,但是你把它叫做错误的方式。下面是正确的方法:

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

我不明白是什么IsAssignableFrom做

其实,这究竟是干什么的名字告诉你:它测试一个给定类型的变量是否可指派来自另一种类型的值。

+0

对不起,但事实并非如此,我确实需要其他人。如果“type”是_someVar的类型,则IsAssignableFrom仅返回true。如果它是_someVar的父类型,则返回false。我需要与“is”完全相同的功能,它也适用于父类型。 –

+0

@大卫啊,你需要反驳论点! –

+0

啊,我应该仔细看看你的代码。我没有想过要做type.IsAssignableFrom(),我一直在做_someVar.IsAssignableFrom()。这确实做我需要的。非常感谢。 –

相关问题