可能重复:
使用CLR中的'as'关键字进行转换
我在C#中看到了两种不同的方式.
例如:
MyObj foo = (MyObj) bar; // this is what I see most of the times
MyObj foo = bar as MyObj; // I do see this sometimes
Run Code Online (Sandbox Code Playgroud)
style 1
和style 2
铸造的专有名称?非常感谢您对此进行调查:)
Meh*_*dad 27
如果演员表无效,第一个("直接"或"C风格"演员)会抛出异常.它也是在对象上执行实际类型转换的唯一方法.(请注意,类型转换与转换不同,因为转换只会更改变量的类型,而类型转换会为您提供*不同类型的对象.)
第二个(没有特别的名称,虽然你可以称之为"试用",因为它在VB.NET中调用)评估null
而不是抛出一个InvalidCastException
.(由于这种行为,它仅适用于引用类型).
没有重大的性能问题相互比较.
as
仅当您希望结果可能无效时才使用.否则,请使用第一个.
该
as
运营商就像是一个转换操作.但是,如果转换不可能,则返回null
而不是引发异常.请考虑以下表达式:Run Code Online (Sandbox Code Playgroud)expression as type
除了表达式仅被计算一次之外,它等效于以下表达式.
Run Code Online (Sandbox Code Playgroud)expression is type ? (type)expression : (type)null
请注意,
as
运算符仅执行引用转换和装箱转换.该as
操作者不能执行其他转换,如用户定义的转换,这应该代替使用通过转换表达式来执行.