0

我知道如何使用 IS 关键字测试对象以查看它是否属于某个类型,例如

if (foo is bar)
{
  //do something here
}

但是您如何测试它不是“bar”?,我似乎找不到与 IS 一起使用的关键字来测试否定结果。

顺便说一句 - 我有一种可怕的感觉,这太明显了,所以提前道歉......

4

4 回答 4

13
if (!(foo is bar)) {
}
于 2008-09-11T08:00:05.027 回答
4

您也可以使用as 运算符

as 运算符用于执行兼容类型之间的转换。

bar aBar = foo as bar; // aBar is null if foo is not bar
于 2008-09-11T08:07:23.730 回答
1

没有特定的关键字

if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
于 2008-09-11T08:00:52.310 回答
1

您应该澄清您是否要测试一个对象是否完全是某种类型或可以从某种类型分配。例如:

public class Foo : Bar {}

假设你有:

Foo foo = new Foo();

如果你想知道 foo 是否不是 Bar(),那么你可以这样做:

if(!(foo.GetType() == tyepof(Bar))) {...}

但是如果你想确保 foo 不是从 Bar 派生的,那么一个简单的检查是使用 as 关键字。

Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}
于 2008-09-17T16:35:06.657 回答