2

请看下面的代码:

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

我正在阅读一个文件并期待格式化某事|某事1|某事2。我正在尝试将它设置为“Nothing”到不存在的数组索引(文件格式已损坏),以便 If 语句顺利进行,但似乎我做错了。你能给我一些提示吗?

4

3 回答 3

1

只需在拆分后检查 position.length 即可。此外,如果您想检查“||Something2|Something3”之类的情况,第一个位置将是“”而不是 Nothing。orelse 是一个短路,如果满足较早的条件,它将阻止后一个条件被评估。

If Positions.length < 3 OrElse Positions(0) = "" OrElse Positions(1) = "" OrElse Positions(2) = "" Then
  ' something
End If
于 2012-10-26T13:29:57.253 回答
1

我假设每个有效行只有三个“东西”。如果是这样,请尝试像这样编写您的Positions()作业:

Dim Positions() As String = Reader _
    .ReadLine() _
    .Split("|") _
    .Concat(Enumerable.Repeat("Nothing", 3)) _
    .Take(3) _
    .ToArray()

这将确保您每次都拥有三个项目。无需检查任何内容。

于 2012-10-26T01:25:08.850 回答
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
于 2012-10-26T01:10:52.920 回答