栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

即使没有空检查,使用“ as”代替强制转换是否有意义?[关闭]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

即使没有空检查,使用“ as”代替强制转换是否有意义?[关闭]

您的理解是真的。这听起来像是尝试对我进行微优化。确定类型时,应使用常规演员表。除了生成更明智的异常之外,它还会快速失败。如果你错了你对类型的假设,你的程序将立即失败,你就可以看到失败立即,而不是等待的原因一个

NullReferenceException
或者
ArgumentNullException
甚至是一个逻辑上的错误在未来的某个时候。通常,
as
没有在
null
某处进行检查的表达式就是代码味道。

另一方面,如果不确定转换是否正确,并期望转换失败,则应使用

as
包裹有
try-catch
块的普通转换来代替。此外,
as
建议在类型检查后再进行强制类型转换后再使用。代替:

if (x is SomeType)   ((SomeType)x).SomeMethod();

其产生的

isinst
指令为
is
关键字,和
castclass
指令的投(有效执行转换两次),你应该使用:

var v = x as SomeType;if (v != null)    v.SomeMethod();

这只会生成一条

isinst
指令。前一种方法在多线程应用程序中具有潜在的缺陷,因为竞争条件可能导致变量在
is
检查成功后更改其类型,并在强制转换行中失败。后一种方法不容易出现此错误。


不建议 在生产代码中使用以下解决方案。如果您真的讨厌C#中的这种基本结构,则可以考虑切换到VB或其他语言。

如果一个人拼命讨厌转换语法,他/她可以编写一个扩展方法来模仿转换:

public static T To<T>(this object o) { // Name it as you like: As, Cast, To, ...    return (T)o;}

并使用整洁的[?]语法:

obj.To<SomeType>().SomeMethod()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号