铸造的差异有以下两种方法

时间:2010-05-26 05:47:00

标签: c# casting

  

可能重复:
  casting vs using the ‘as’ keyword in the CLR

有人可以告诉我以下两个陈述之间的区别是什么,因为它们都给了我相同的结果。我也想知道哪个更好。

Label lblSome = e.Item.FindControl("lblMyLable") as Label;

&&

Label lblSome = (Label)e.Item.FindControl("lblMyLable");

非常感谢你。

2 个答案:

答案 0 :(得分:1)

as检查它是否可以强制转换,如果不能,则将lblSome设置为null。正常投射,(Label),不会对您进行检查,而只是给您一个InvalidCastException。但是,as不适用于不可为空的结构。

答案 1 :(得分:0)

如果e.Item.FindControl("lblMyLable")返回非Label (Label)e.Item.FindControl("lblMyLable")的对象,则会生成InvalidCastException。 而e.Item.FindControl("lblMyLable") as Label将导致将null分配给lblSome。