一尘不染

在C#中强制转换和使用“ as”有什么区别?

c#

如果存在差异,那么进行以下转换的两种方式之间有什么区别?

在这种情况下e是一个GridViewRowEventArgs对象。

GridView gv = (GridView)e.Row.FindControl("gv"); //first way

GridView gv2 = e.Row.FindControl("gv") as GridView; //second way

阅读 368

收藏
2020-05-19

共1个答案

一尘不染

不同之处在于:

  • 如果强制转换失败,则会引发InvalidCastException
  • 如果as运算符失败,则仅返回空引用。
  • 您不能使用as非空值类型(例如,您不能使用“ o as int”)。
  • 强制转换运算符还用于取消装箱。(as可用于取消装箱为可为空的值类型。)
  • 强制转换运算符还可以执行用户定义的转换。

编辑:我已经在其他地方写过有关何时适合使用哪个运算符的文章。可能值得一读…

2020-05-19