VB.NET字符串连接:编译错误?

时间:2011-11-09 10:59:52

标签: .net vb.net compiler-errors

问题:

以下程序会抛出运行时错误(从double转换无效),因为有

 + _

后跟换行符和

 +"

换句话说,就是

"SomeString" + "someotherstring" ++ "yet another string"

<STAThread()> _
Sub Main()
    Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder

    Dim dt As New DataTable
    dt.Columns.Add("oeId", GetType(String))
    dt.Columns.Add("ZO_RM_Name", GetType(String))
    dt.Columns.Add("ZO_GB_Name", GetType(String))
    dt.Columns.Add("gubeg", GetType(DateTime))
    dt.Columns.Add("guend", GetType(DateTime))

    Dim dr As DataRow = Nothing

    For i As Integer = 0 To 10 Step 1
        dr = dt.NewRow()
        dr("oeId") = "Organization Unit id " + (i * 1000).ToString()
        dr("ZO_RM_Name") = "Room " + i.ToString()
        dr("ZO_GB_Name") = "Building " + i.ToString()
        dr("gubeg") = System.DateTime.Now
        dr("guend") = System.DateTime.Now.AddDays(22).AddYears(20).AddHours(2)
        dt.Rows.Add(dr)
    Next

    For Each drThisRow As DataRow In dt.Rows
        sb.AppendLine("Organisationseinheit " + drThisRow("oeId").ToString() + _
                               +" in Raum " + drThisRow("ZO_RM_Name").ToString() + " von Gebäude " + drThisRow("ZO_GB_Name").ToString() _
                               + " in der Gültigkeit von " + drThisRow("gubeg").ToString() + " bis " + drThisRow("guend").ToString() + "." _
        )
    Next
End Sub '' Main ''

可以简化这个问题:

 Dim newstring As String = "SomeString" + "someotherstring" + +"yet another string"

它编译得很好,但是当程序运行时,它会引发运行时错误 这是编译器错误吗? 不应该因编译错误而阻止我,比如语法无效吗?

2 个答案:

答案 0 :(得分:4)

+运算符有两种变体:

  • 二元运算符a + b
  • 一元运算符+a

第一个说“请a并添加b并生成结果”。第二个说“用a带正号”。

在这种情况下,表达式被计算为一个字符串+一个double,因为带有OPTION STRICT OFF的VB.NET会认为你希望第二个操作数在这里作为一个字符串,它将被自动转换为一个double运行时,因为你用一元+运算符作为前缀。

设置OPTION STRICT ON以使VB.NET在编译时更严格地进行类型检查,代价是在某些情况下你必须编写更具体的代码。

答案 1 :(得分:2)

尝试使用&充当vb.net中的并置运算符,这将导致编译错误而不启用Option Strict。我认为正在发生的事情是,由于运营商之间没有内容,它使用第二个+作为数字的符号(例如+1)。由于VB默认行为隐式转换它尝试将字符串文字转换为数字。

使用Option Strict On将导致显示编译器错误。