【问题标题】:Automatic casting to string in C# and VB.NET在 C# 和 VB.NET 中自动转换为字符串
【发布时间】:2008-11-07 08:26:19
【问题描述】:

我可以在 C# 中做到这一点..

int number = 2;
string str = "Hello " + number + " world";

..str 以“Hello 2 world”结尾。

在 VB.NET 中我可以做到这一点..

Dim number As Integer = 2
Dim str As String = "Hello " + number + " world"

..但我得到一个 InvalidCastException “从字符串“Hello”到类型“Double”的转换无效。”

我知道在这两种情况下我都应该使用 .ToString(),但是这里的代码是怎么回事?

【问题讨论】:

  • 实际上,您不应该使用 ToString,而应该使用 String.Format 来格式化文本。您的国际用户会感谢您的。

标签: c# vb.net casting


【解决方案1】:

在 VB 中,我相信字符串连接运算符是 & 而不是 + 所以试试这个:

Dim number As Integer = 2
Dim str As String = "Hello " & number & " world"

基本上当 VB 看到 + 我怀疑它会尝试进行数字加法或使用类型中定义的加法运算符(或者毫无疑问是其他更复杂的事情,基于选项......)请注意 System.String 没有定义加法运算符 - 通过调用String.Concat,它全部隐藏在编译器中。 (这允许更有效地连接多个字符串。)

【讨论】:

    【解决方案2】:

    Visual Basic 区分 +& 运算符。如果表达式不是字符串,& 将转换为字符串。

    &Operator (Visual Basic)

    + 运算符使用更复杂的评估逻辑来确定将最终转换为什么(例如,它受 Option Strict 配置等因素的影响)

    +Operator (Visual Basic)

    【讨论】:

      【解决方案3】:

      如果可能,我建议远离原始字符串连接。

      不错的选择是使用 string.format:

      str = String.Format("Hello {0} workd", Number)
      

      或者使用 System.Text.StringBuilder 类,它在更大的字符串连接上也更有效。

      两者都自动将其参数转换为字符串。

      【讨论】:

        【解决方案4】:

        VB 加号 (+) 运算符不明确。

        如果您没有启用 Option Explicit,如果我没记错的话,可以这样做:

        Dim str = 1 + "2"
        

        并将 str 设为整数 = 3。

        如果您明确需要字符串连接,请使用 & 运算符

        Dim str = "Hello " & number & " world"
        

        它会很乐意为您将数字转换为字符串。

        我认为这种行为是为了向后兼容而保留的。

        在 VB 中编程时,始终使用 & 符号来连接字符串。

        【讨论】:

          猜你喜欢
          • 2020-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-22
          • 1970-01-01
          • 2016-08-27
          • 1970-01-01
          相关资源
          最近更新 更多