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

问题描述 投票:0回答:4

我有一些代码,例如:

int value = 5;
MessageBox.Show ( value );

MessageBox.Show
抱怨说:

“无法从 'int' 转换为 ‘字符串’”

我似乎记得某些情况下,值似乎隐式转换为字符串值,但无法准确回忆起来。

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

c# .net string implicit-conversion
4个回答
18
投票

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


12
投票

一个简短的解决方案(任何需要字符串的地方):

 MessageBox.Show(""+value);

但在大多数情况下我更喜欢

ToString()
String.Format()

回答“为什么”部分:因为隐式转换可能很危险并且可能破坏类型安全。

"1" + 2 = "12" = 12
,并不总是您想要或期望的。


3
投票

要了解确切的原因,您必须询问 C# 编译器人员或 .NET 运行时人员。

但是,.NET 框架或 C# 语言中没有任何地方可以将值自动隐式转换为字符串。

但是,您可能会想到字符串连接的工作方式,但这只是因为

string.Concat
方法有很多重载,其中包括一个需要对象的重载。

换句话说,这是允许的:

string s = "Hello there: " + 4;

框架中的其他方法也有很多重载,例如 Debug.WriteLine 等,它可以轻松接受整数或小数,通过调用 .ToString 将其转换为字符串,然后打印它。

然而,它不是内置于 string 或 int 中的东西,而是方法本身。


-1
投票

尝试

MessageBox.Show(value.ToString());
© www.soinside.com 2019 - 2024. All rights reserved.