字符串 = 字符串 + int:幕后有什么?
在 C# 中,您可以隐式连接一个字符串和一个整数:
string sth = "something" + 0;
我的问题是:
为什么,假设您可以隐式连接一个字符串和一个 int,C# 不允许像这样初始化字符串:
字符串 sth = 0; // 错误:无法将源类型“int”转换为目标类型“string”
C# 如何将 0 转换为字符串。是
0.ToString()
或(string)0
还是其他什么?- 如何找到上一个问题的答案?
In C# you can implicitly concatenate a string and let's say, an integer:
string sth = "something" + 0;
My questions are:
Why, by assuming the fact that you can implicitly concatenate a string and an int, C# disallows initializing strings like this:
string sth = 0; // Error: Cannot convert source type 'int' to target type 'string'
How C# casts 0 as string. Is it
0.ToString()
or(string)0
or something else?- How to find an answer of the previous question?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它编译为对
String.Concat(object, object)
,如下所示:(
请注意,该特定行实际上会被编译器优化掉)
此方法定义如下:(取自 .Net 参考源)
(这会调用
String.Concat (string, string)
)要发现这一点,您可以使用
ildasm
或 Reflector(在 IL 或没有优化的 C# 中)来查看+
的内容行编译为.It compiles to a call to
String.Concat(object, object)
, like this:(Note that this particular line will actually be optimized away by the compiler)
This method is defined as follows: (Taken from the .Net Reference Source)
(This calls
String.Concat(string, string)
)To discover this, you can use
ildasm
, or Reflector (in IL or in C# with no optimizations) to see what the+
line compiles to.C# 4 规范第 7.8.4 节对此进行了规定:
最后一句话与这种情况最相关。
然后后来:
它指定如何将整数转换为字符串。
结果:
执行连接的实际方法是特定于实现的,但正如其他答案中所述,MS 实现使用 string.Concat。
This is specified in section 7.8.4 of the C# 4 spec:
The last sentence is the most relevant one to this situation.
Then later:
That specifies how the integer is converted into a string.
And the result:
The actual means of performing concatenation is implementation-specific, but as noted in other answers, the MS implementation uses
string.Concat
.