我有一些代码,例如:
int value = 5;
MessageBox.Show ( value );
MessageBox.Show
抱怨说:
“无法从 'int' 转换为 ‘字符串’”
我似乎记得某些情况下,值似乎隐式转换为字符串值,但无法准确回忆起来。
这个决定背后的原因是什么?任何值都不能隐式转换为字符串值?
MessageBox.Show()
只接受字符串。 当您使用像 Debug.WriteLine
这样的东西时,它接受一堆不同的对象类型,包括 object
,然后在该对象上调用 ToString()
。 这可能就是你所经历的。
一个简短的解决方案(任何需要字符串的地方):
MessageBox.Show(""+value);
但在大多数情况下我更喜欢
ToString()
或 String.Format()
。
回答“为什么”部分:因为隐式转换可能很危险并且可能破坏类型安全。
"1" + 2 = "12" = 12
,并不总是您想要或期望的。
要了解确切的原因,您必须询问 C# 编译器人员或 .NET 运行时人员。
但是,.NET 框架或 C# 语言中没有任何地方可以将值自动隐式转换为字符串。
但是,您可能会想到字符串连接的工作方式,但这只是因为
string.Concat
方法有很多重载,其中包括一个需要对象的重载。
换句话说,这是允许的:
string s = "Hello there: " + 4;
框架中的其他方法也有很多重载,例如 Debug.WriteLine 等,它可以轻松接受整数或小数,通过调用 .ToString 将其转换为字符串,然后打印它。
然而,它不是内置于 string 或 int 中的东西,而是方法本身。
尝试
MessageBox.Show(value.ToString());