为了账号安全,请及时绑定邮箱和手机立即绑定

直接演员与“作为”操作者?

直接演员与“作为”操作者?

C#
慕沐林林 2019-06-15 11:19:41
直接演员与“作为”操作者?考虑以下代码:void Handler(object o, EventArgs e){    // I swear o is a string    string s = (string)o; // 1    //-OR-    string s = o as string; // 2    // -OR-    string s = o.ToString(); // 3}这三种铸造的区别是什么(好的,第三种不是铸造,但你得到了意图)。哪一种是最好的呢?
查看完整描述

3 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这取决于你是否知道o是一根绳子,你想用它做什么。如果你的评论意味着o真的是一根绳子,我更喜欢直的(string)o演员-不太可能失败。

使用直接转换的最大优点是,当它失败时,您将得到一个InvalidCastException这很大程度上告诉了你出了什么问题。

带着as操作员,如果o不是一根绳子,s设置为null,如果您不确定并且想要测试的话,这是很方便的。s:

string s = o as string;if ( s == null ){
    // well that's not good!
    gotoPlanB();}

但是,如果不执行该测试,则将使用s晚些时候有一个NullReferenceException扔。它们更常见,而且罗得一旦它们在野外发生,很难追踪,因为几乎每一行都会删除一个变量,并可能抛出一个变量。另一方面,如果您试图转换为值类型(任何原语或结构,如日期时间),你必须使用直石膏-as不管用。

在转换为字符串的特殊情况下,每个对象都有一个ToString,那么您的第三种方法可能还可以,如果o不为空,而您认为ToString方法可能会做您想做的事。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 299 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信