2

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

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

            GridDataItem ParentItem = e.Item as GridDataItem;

            GridDataItem NewRow = (GridDataItem)e.Item;
4

7 回答 7

6

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

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

阅读更多

于 2013-01-09T16:30:11.153 回答
3

第一个: ParentItem 将是nullife.Item不是 Type GridDataItem

第二个:它会抛出一个异常,如果e.Item不是类型GridDataItem

于 2013-01-09T16:30:02.630 回答
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

于 2013-01-09T16:32:10.197 回答
2

e.Item这是转换为 a的两种不同方法GridDataItem,具体取决于您希望如何处理e.Item不是 a的场景GridDataItem

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

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

于 2013-01-09T16:33:51.563 回答
1

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

于 2013-01-09T16:30:07.493 回答
1

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

于 2013-01-09T16:30:38.243 回答
0

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

所以区别在于你如何处理错误的情况。

于 2013-01-09T17:21:57.117 回答