【问题标题】:Why aren't values implicitly convertible to string in C#?为什么值不能在 C# 中隐式转换为字符串?
【发布时间】:2011-04-01 17:04:35
【问题描述】:

我有一些类似的代码:

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

MessageBox.Show 抱怨说:

"无法从 'int' 转换为 '字符串'"

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

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

【问题讨论】:

标签: c# .net string compiler-construction implicit-conversion


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

     MessageBox.Show(""+value);
    

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

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

    【讨论】:

    • 好点 Henk,我不知道隐式转换的缺点。
    • @Joan:如果您熟悉 javascript 处理字符串的方式(或者至少看过足够多的内容),您会意识到大多数语言不会进行那么多的隐式转换。 :) 查看this 和所有其他与 javascript 相关的答案。
    【解决方案3】:

    对于确切的原因,您必须询问 C# 编译器人员或 .NET 运行时人员之一。

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

    但是,您可能会想到字符串连接的工作方式,但这只是因为string.Concat 方法上有很多重载,包括接受对象的重载。

    换句话说,这是允许的:

    string s = "Hello there: " + 4;
    

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

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

    【讨论】:

    • 您好,downvoter,请对问题所在发表评论,以便我有机会更正并从错误中吸取教训。
    【解决方案4】:

    试试

    MessageBox.Show(value.ToString());
    

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 2017-04-09
      • 2018-10-26
      • 1970-01-01
      • 2010-09-18
      • 2015-03-18
      • 2011-12-10
      • 1970-01-01
      相关资源
      最近更新 更多