当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用"as"之间有什么区别?

如何解决《在C#中使用"as"之间有什么区别?》经验,为你挑选了2个好方法。

如果存在差异,则执行以下演员的两种方式之间有什么区别?

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

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

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

Jon Skeet.. 77

不同之处是:

如果一个演员表失败,它会抛出一个InvalidCastException.

如果as运算符失败,则只返回空引用.

您不能使用as不可为空的值类型(例如,您不能使用" o as int").

演员操作员也用于拆箱.(as可用于将unbox转换为可为空的值类型.)

演员操作员还可以执行用户定义的转换.

编辑:我在其他地方写过关于什么时候我觉得使用哪个运算符是合适的.这可能值得一读......



1> Jon Skeet..:

不同之处是:

如果一个演员表失败,它会抛出一个InvalidCastException.

如果as运算符失败,则只返回空引用.

您不能使用as不可为空的值类型(例如,您不能使用" o as int").

演员操作员也用于拆箱.(as可用于将unbox转换为可为空的值类型.)

演员操作员还可以执行用户定义的转换.

编辑:我在其他地方写过关于什么时候我觉得使用哪个运算符是合适的.这可能值得一读......



2> jonp..:

上述答案中没有提到的是意图 - 为什么要进行转换,(更重要的是)转换后的行会发生什么?

例如,我见过类似以下的代码:

if ((foo as SomeType).SomeMethod()) { /* ... */ }

这可以与演员使用版本进行比较:

if (((SomeType) foo).SomeMethod()) { /* ... */ }

那么,哪一个更好?

演员是.

如果转换失败,则使用as将导致NullReferenceException.

使用强制InvalidCastException转换将导致转换失败.

现在告诉我,哪个调试更有用?A NullReferenceException,几乎可以通过任何东西生成,或者InvalidCastException让你知道究竟出了什么问题?

因此,使用as如果转换是实际可选的(意味着存在必须null检查使用变量之前).否则,使用演员,从而使你的意图更明确.


- 为什么要进行转换,(更重要的是)转换后的行会发生什么?
使用
可选的(意味着存在
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有