首页 > C# > 直接转换与“as”运算符?

直接转换与“as”运算符?

上一篇 下一篇

请考虑以下代码:

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
}

三种类型的铸造有什么区别(好吧,第三种不是铸造,但你明白了意图)。应该首选哪一个?

分割线

网友回答:

  1. string s = (string)o;当某物绝对应该是
    另一件事时使用。
  2. string s = o as string;当某事可能是另一
    件事时使用。
  3. string s = o.ToString();当您不关心它是什么
    但只想使用
    可用的字符串表示形式时,请使用。

分割线

网友回答:

string s = (string)o; // 1

如果不是 .否则,将分配给 ,即使 是 。ostringosonull

string s = o as string; // 2

分配给 if 不是 或 if 是 。因此,不能将其与值类型一起使用(在这种情况下,运算符永远不会返回)。否则,将分配给 。nullsostringonullnullos

string s = o.ToString(); // 3

导致空引用异常,如果为 。分配返回的任何内容,无论是什么类型。onullo.ToString()so


对于大多数转化,请使用 1 – 它简单明了。我倾向于几乎从不使用 2,因为如果某些东西的类型不正确,我通常希望发生异常。我只看到需要这种返回空类型的功能,这些函数使用使用错误代码的糟糕设计的库(例如,返回 null = 错误,而不是使用异常)。

3 不是强制转换,只是一个方法调用。当您需要非字符串对象的字符串表示形式时,请使用它。

分割线

网友回答:

这实际上取决于您是否知道是否是字符串以及您想用它做什么。如果你的评论意味着这真的是一个字符串,我更喜欢直接的演员——它不太可能失败。oo(string)o

使用直接强制转换的最大优点是,当它失败时,你会得到一个 InvalidCastException,它几乎可以告诉你出了什么问题。

使用运算符,if 不是字符串,设置为 ,如果您不确定并想要测试,这将很方便:asosnulls

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

但是,如果不执行该测试,则稍后将使用并引发 NullReferenceException。这些往往更常见,一旦它们在野外发生,就更难追踪,因为几乎每行都取消引用一个变量并可能抛出一个变量。另一方面,如果您尝试强制转换为值类型(任何基元或 DateTime 等结构),则必须使用直接强制转换 – 这将不起作用。sas

在转换为字符串的特殊情况下,每个对象都有一个 ,因此如果不是 null,并且您认为该方法可能会执行您想要的操作,则您的第三个方法可能没问题。ToStringoToString

模板简介:该模板名称为【直接转换与“as”运算符?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 190次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-07
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 微信素材 微信公众平台 微信模板 html5 微信图片 企业网站 微信文章 自适应 单页式简历模板
您可能会喜欢的其他模板