我在C#中看到了两种不同的方式。
例如:
MyObj foo = (MyObj) bar; // this is what I see most of the times
MyObj foo = bar as MyObj; // I do see this sometimes
style 1
和style 2
施法的专有名称是什么?非常感谢您对此进行调查:)
答案 0 :(得分:27)
如果演员表无效,第一个(“直接”或“C风格”演员)会抛出异常。它也是在对象上执行实际类型转换的唯一方法。 (请注意,类型转换与转换不同,因为转换只会更改变量的类型,而类型转换会为您提供*不同类型的对象。)
第二个(没有特别的名称,虽然你可以称之为“试用”,因为它在VB.NET中调用)评估为null
而不是抛出{{1} }。 (由于这种行为,它仅适用于引用类型。)
相互之间没有重大的性能问题。
只有在期望您的结果可能无效时才使用InvalidCastException
。否则,请使用第一个。
顺便提一句,MSDN might be helpful部分问题:
as
运算符就像一个强制转换操作。但是,如果无法进行转换,则返回as
而不是引发异常。请考虑以下表达式:null
除了表达式仅被计算一次之外,它等效于以下表达式。
expression as type
请注意,
expression is type ? (type)expression : (type)null
运算符仅执行引用转换和装箱转换。as
运算符无法执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行转换。