请查看以下代码:
Try
Dim Reader As New System.IO.StreamReader(PositionsFileName)
Do While Reader.Peek() <> -1
Dim Positions() As String = Reader.ReadLine().Split("|")
If (Positions(0) Is Nothing) Or (Positions(1) Is Nothing) Or (Positions(2) Is Nothing) Then
' something
End If
Loop
Catch ex As Exception
ex.Source = Nothing
End Try
我正在阅读一个文件并希望格式有些东西| something1 | something2。我试图让它设置为“Nothing”到不存在的数组索引(文件格式被破坏),以便If语句顺利进行,但似乎我做错了。你能给我一些提示吗?
答案 0 :(得分:1)
如果您执行Split("|")
并且只有2个项目(例如,something|something1
),Positions(2)
将不会是Nothing
,那么它就不会存在。因此,您的代码会引发异常,即index out of bounds of the array
。
如果在这种情况下需要Positions(2)
包含Nothing
,则代码可能如下所示:
Dim Positions(2) As String
Dim tmpArray() As String = Reader.ReadLine().Split("|")
For i = 0 To UBound(Positions)
If i <= UBound(tmpArray) Then
Positions(i) = tmpArray(i)
Else
Positions(i) = Nothing
End If
Next
答案 1 :(得分:1)
我假设每个有效行只有三个“Somethings”。如果是这样,请尝试像这样编写Positions()
作业:
Dim Positions() As String = Reader _
.ReadLine() _
.Split("|") _
.Concat(Enumerable.Repeat("Nothing", 3)) _
.Take(3) _
.ToArray()
这将确保您每次都有三件物品。无需检查是否有事。
答案 2 :(得分:1)
只需在分割后检查positions.length。此外,如果你想检查像“|| Something2 | Something3”这样的情况,第一个位置将是“”而不是Nothing。矿石是一种短路,如果满足早期条件,将保持后者的避免。
If Positions.length < 3 OrElse Positions(0) = "" OrElse Positions(1) = "" OrElse Positions(2) = "" Then
' something
End If