对象在C#铸造

问题描述:

可能重复:
Casting: (NewType) vs. Object as NewType对象在C#铸造

只是想知道哪一个是速度更快,有什么区别。

MyClass test = someclass as MyClass;

MyClass test =(MyClass)someclass;

不同的是,当它失败,而是它与null填充L值,而与支架铸件将抛出InvalidCastExceptionas关键字不会抛出异常。

+1

而且现在有一个有意义的异常比NullReferenceException稍后更好。所以我会说坚持定期演员,除非你在'as'演员之后立即处理无效。 – 2010-08-25 16:03:11

+1

另请注意,您不能在值类型中使用as关键字。 – 2010-08-25 16:06:25

如果所需演员表无效,as关键字将返回null。在这种情况下,显式强制转换会引发异常。因此,我相信隐含的演员阵容(as)较慢,尽管它可能可以忽略不计。

+0

nope,因为''铸造比前缀铸造快得多。 – Femaref 2010-08-25 16:02:33

+0

有趣。你有这个技术原因吗? – TreDubZedd 2010-08-25 16:14:31

+0

你可以在我的答案中提供的codeproject链接中看到技术原因。 – Femaref 2010-08-25 17:47:25

as铸造速度比前缀铸造快,但不会产生可靠的结果,即。如果不能执行强制转换,它将返回null。你必须自己处理。如果T1无法铸造到T2,则前缀投射将抛出异常。

参见:blog

as vs prefix

codeproject

+2

我以为那样慢一点.... – Grzenio 2010-08-25 16:03:02

+0

gj与downvote无论谁是。 – Femaref 2010-08-25 16:07:52

更快?这可能不会有问题。您必须等到性能分析应用程序告诉您演员阵容花费太长时间的场景。

区别?

将设置测试SomeClass的不能转换到MyClass的

MyClass test = someclass as MyClass; 

将抛出一个异常时,SomeClass的不能转换到MyClass的

MyClass test = (MyClass)someclass;