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

在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还是其他什么东西?


如何找到上一个问题的答案?


慕娘9325324
浏览 654回答 2
2回答

呼唤远方

这在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。
打开App,查看更多内容
随时随地看视频慕课网APP