在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。
- 2 回答
- 0 关注
- 668 浏览
添加回答
举报
0/150
提交
取消