加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

立即窗口中的C#==运算符与运行时的行为不同

发布时间:2020-12-15 03:56:08 所属栏目:百科 来源:网络整理
导读:在立即窗口中尝试以下操作: object a1 = "a";object a2 = "a";a1==a2 // outputs false 你会看到a1 == a2输出错误. 但是,在运行时在一个窗口应用程序或控制台,你会得到真实的: object t1 = "a";object t2 = "a";MessageBox.Show((t1 == t2).ToString()); /
在立即窗口中尝试以下操作:
object a1 = "a";
object a2 = "a";
a1==a2 // outputs false

你会看到a1 == a2输出错误.

但是,在运行时在一个窗口应用程序或控制台,你会得到真实的:

object t1 = "a";
object t2 = "a";
MessageBox.Show((t1 == t2).ToString()); // outputs true

运行时行为与==运算符和字符串的定义一致.

有人知道这是立即窗口中的错误?

解决方法

你所描述的是正确的行为.

Object中的==的定义比较了它的参数的引用.这与使用String比较的字符串的值不同. C#中的运算符不是虚拟的.这意味着即使你的对象实际上是字符串,因为静态类型是对象,所以Object被调用,这意味着引用比较.

在C#字符串中可以在实习池中为interned.通常当您在运行时创建新字符串时,您将收到对全新字符串对象的引用.要获得一个内部字符串,您可以调用string.Intern方法.但是,当您编译C#代码时,文字字符串会自动为您自动进行身份验证,因此如果您的代码中有两个相同的文字字符串,您将获得对同一个字符串对象的引用.

在立即窗口中,字符串显然不被内联 – 每次创建新的字符串,即使它们具有相同的值.但是.NET中没有要求所有字符串都必须被实体化,所以我不认为这是一个错误.

您的代码应避免依赖字符串是否被实体化,因为这是一个实现细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读