为什么值不能在C#中隐式转换为字符串?

Joa*_*nge 9 .net c# compiler-construction string implicit-conversion

我有一些代码:

int value = 5;
MessageBox.Show ( value );
Run Code Online (Sandbox Code Playgroud)

MessageBox.Show抱怨说:

"无法从'int'转换为'string'"

我似乎记得一些情况,其中值似乎被隐式转换为字符串值,但无法准确地回忆它们.

这个决定背后的原因是什么,任何值都不能隐式转换为字符串值?

Mik*_*ark 18

MessageBox.Show()只接受一个字符串.当你使用类似的东西时Debug.WriteLine,它接受一堆不同的对象类型,包括object,然后调用ToString()该对象.这可能就是你所经历的.


Hen*_*man 12

一个简短的解决方案(无论你需要一个字符串):

 MessageBox.Show(""+value);
Run Code Online (Sandbox Code Playgroud)

但在大多数情况下,我更喜欢一个ToString()或多个String.Format().

回答"为什么"部分:因为隐式转换可能很危险并且可能破坏类型安全性.
"1" + 2 = "12" = 12,并不总是你想要或期望的.