在C#中,“is”关键字是否总是需要跟随一个类?

3

在 Actionscript 中,您可以使用变量保存类类型的引用,然后使用 is 将类的实例与变量进行比较。例如:

var a:Foo = new Foo();
var type:Class = Foo;

if(a is type){  //this is true
  //do something
}

你能在C#中做类似的事情吗?还是“is”关键字必须总是跟在一个类后面?

4个回答

10

1

.NET 2010 beta 2 :已测试兼容框架4、3.5(“完整”框架版本而非“客户端配置文件”版本)

给定:

public class Foo
{
    public Foo() {}
}

并在运行时执行:

Foo myFoo = new Foo();

Console.WriteLine(myFoo is Foo);

Console.WriteLine(typeof(Foo).IsInstanceOfType(myFoo));

这两个 Console.WriteLine 语句都向控制台窗口打印 "True"。

你认为为什么会输出 'False 到控制台窗口:

Console.WriteLine(myFoo.GetType().IsInstanceOfType(typeof(Foo)));

Bill,我之前看过你的“已经测试过框架3.5”等声明。个人认为这会让人分心,而实际答案却被忽略了。这很遗憾,因为你的回答总体质量还是相当高的。 - Jan Jongboom
@Jan 我认为这是有用的信息;许多人仍然使用早期的Framework版本。我注意到当我使用“客户端”档案时,发现了一些情况确实会有所不同。由于我正在使用beta VS 2010,因此我觉得说明一下是好的。个人而言,我希望在任何帖子中都能看到这种信息。 我经常发现在SO上标记为正确答案,并获得多个赞的答案,其中的代码我可以“通过视觉”看到不会编译。我希望我的公共答案始终基于编码验证... 直到我成为“Jon Skeet”:) 如果这打扰了你,对不起! - BillW

1

它也可以跟着一个接口名称。


0

数据类型是对象,因此在C#中以下两种方式都是有效的

if (value is String) ...

if (value is ExampleClass) ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接