这两个C#语句之间的区别是什么

本文关键字:之间 语句 区别 是什么 两个 | 更新日期: 2023-09-27 17:51:11

可能重复:
C#"as"演员阵容与经典演员阵容

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

            GridDataItem ParentItem = e.Item as GridDataItem;
            GridDataItem NewRow = (GridDataItem)e.Item;

这两个C#语句之间的区别是什么

"as运算符类似于强制转换操作。但是,如果无法进行转换,as将返回null,而不是引发异常">

请注意,as运算符只执行引用转换和装箱转换。as运算符不能执行其他转换,例如用户定义的转换,而应该使用转换表达式来执行

阅读更多

第一个:如果e.Item不是GridDataItem类型,ParentItem将是null

第二个:如果e.Item不是类型GridDataItem

,它将抛出异常
//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

根据您希望如何处理e.Item不是GridDataItem的场景,有两种不同的方法可以将e.Item强制转换为GridDataItem

在第一种情况下,使用as:您总是会得到一个结果,但如果e.Item不是GridDataItem,则结果将是null

在第二种情况下,使用显式强制转换:如果e.Item不是GridDataItem,那么您的代码将抛出一个InvalidCastException(您可以捕获(。

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

如果转换失败,使用"as"而不是显式强制转换不会引发异常,而是返回null。

如果e是GridDataItem,则没有差异。如果不是:"as"运算符将返回Null"不可能捕获"将抛出异常

因此,区别在于"只是"你如何处理错误的情况。