问题:
以下程序会抛出运行时错误(从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"
它编译得很好,但是当程序运行时,它会引发运行时错误
这是编译器错误吗?
不应该因编译错误而阻止我,比如语法无效吗?
答案 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
将导致显示编译器错误。