这两个C#语句有什么区别?

时间:2013-01-09 16:28:03

标签: c# .net

  

可能重复:
  C# “as” cast vs classic cast

我继承了一些代码,我看到了这个Grid事件处理程序。我不知道这两个陈述之间是否存在差异,我不认为有,但事实是它们在代码中背靠背让我想知道为什么两种方式做同样的事情(假设它们做同样的事情)事情)。有人可以解释一下这个区别吗?

            GridDataItem ParentItem = e.Item as GridDataItem;

            GridDataItem NewRow = (GridDataItem)e.Item;

7 个答案:

答案 0 :(得分:6)

“as运算符就像一个强制转换操作。但是,如果无法进行转换,则返回null而不是引发异常”

“请注意,as运算符仅执行引用转换和装箱转换.as运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行转换。”

Read More

答案 1 :(得分:3)

第一个:如果null不属于e.Item类型,则ParentItem将为GridDataItem

第二种:如果e.Item不属于GridDataItem类型

,则会抛出异常

答案 2 :(得分:2)

//This will perform a safe conversion.  Null will be retuirned if e.Item is not
//a GridDataItem
GridDataItem ParentItem = e.Item as GridDataItem;

//This will throw an exception if e.Item is not a GridDataItem
GridDataItem NewRow = (GridDataItem)e.Item;

参见常见问题: http://blogs.msdn.com/b/csharpfaq/archive/2004/03/12/what-s-the-difference-between-cast-syntax-and-using-the-code-as-code-operator.aspx

答案 3 :(得分:2)

这是将e.Item投射到GridDataItem的两种不同方式,具体取决于您希望处理e.Item不是GridDataItem的方案。

在第一种情况下,使用as,您将始终获得结果,但如果e.Item不是GridDataItem,那么结果将为null 1}}。

在第二种情况下,如果e.Item不是GridDataItem,则使用显式广告,那么您的代码将抛出InvalidCastException(您可以捕捉)。

答案 4 :(得分:1)

如果无法进行类型转换,第一行将确保ParentItem为null。第二行将抛出异常

答案 5 :(得分:1)

如果转换失败,使用“as”而不是显式强制转换将不会抛出异常,而是返回null。

答案 6 :(得分:0)

如果e是GridDataItem,则没有差异。 如果不 : “as”运算符将返回Null “不可能的捕获”将引发异常

所以差异就是“只是”你如何处理错误的情况。