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

字符串=字符串+整数:背后是什么?

字符串=字符串+整数:背后是什么?

C#
慕娘9325324 2019-10-19 17:03:53
在C#中,您可以隐式连接一个字符串,比方说一个整数:string sth = "something" + 0;我的问题是:为什么,假设您可以隐式地将一个字符串和一个int串联在一起,C#不允许像这样初始化字符串:string sth = 0; // Error: Cannot convert source type 'int' to target type 'string'C#如何将0转换为字符串。它是0.ToString()或者(string)0还是其他什么东西?如何找到上一个问题的答案?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

这在C#4规范的7.8.4节中指定:


对于形式的操作,将应用x + y二进制运算符重载解析(第7.3.4节)来选择特定的运算符实现。操作数将转换为所选运算符的参数类型,结果的类型为运算符的返回类型。


预定义的加法运算符在下面列出。对于数字和枚举类型,预定义的加法运算符计算两个操作数之和。当一个或两个操作数的类型为string时,预定义的加法运算符将操作数的字符串表示形式连接在一起。


最后一句话是与此情况最相关的一句话。


然后再:


字符串串联


string operator +(string x, string y);


string operator +(string x, object y);


string operator +(object x, string y);

这些二进制+运算符的重载执行字符串连接。如果字符串连接的操作数为null,则替换为空字符串。否则,通过调用ToString从类型对象继承的虚拟方法,任何非字符串参数都将转换为其字符串表示 形式。如果ToString返回null,则替换为空字符串。


这指定了如何将整数转换为字符串。


结果:


字符串连接运算符的结果是一个字符串,该字符串由左操作数的字符和右操作数的字符组成。字符串串联运算符从不返回空值。


执行连接的实际方法是特定于实现的,但正如其他答案中所指出的,MS实现使用string.Concat。


查看完整回答
反对 回复 2019-10-19
  • 2 回答
  • 0 关注
  • 650 浏览

添加回答

举报

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