【问题标题】:Check multiple lines of an array against a condition根据条件检查数组的多行
【发布时间】:2018-04-20 08:19:32
【问题描述】:

我可以减少这样的东西吗:

If Line(1) = False _
   AND Line(1) = False _
   AND Line(2) = False _
   AND Line(3) = False _
   AND Line(4) = False _
   AND Line(5) = False _
   AND Line(6) = False _
   AND Line(7) = False _
   AND Line(8) = False _
   AND Line(9) = False Then

这样的:

If Line(1-9) = False Then

如果有,怎么做?

【问题讨论】:

  • Select Case 带有Case Else 的语句如果你想在Line(n) 条件之外设置语句就足够了。
  • 你应该几乎总是在 VB.NET 中使用 AndAlsoOrElse 而不是 AndOr。如果您不确定要使用哪个,请使用前者。如果您想了解差异(您应该),请阅读文档。

标签: .net arrays vb.net


【解决方案1】:

您可以为此使用 LINQ。假设 LineList(Of Boolean),您可以使用 LINQ 的 All() 函数来检查数组的所有项是否符合条件:

If Line.All(Function(x) x = False) Then

如果您只想检查前 9 项,请先使用Take 函数:

If Line.Take(9).All(Function(x) x = False) Then

如果您想检查列表中间的某些项目(而不是列表的开头),请先使用Skip 函数,然后使用Take 函数:

If Line.Skip(3).Take(9).All(Function(x) x = False) Then

【讨论】:

  • 这是一件小事,但考虑到我总是直接使用Boolean 变量而不是将其与True 进行比较,即我会使用Function(x) x 而不是Function(x) x = True,我会也使用Function(x) Not x 而不是Function(x) x = False
  • @jmcilhinney 我也会这样做,但只是想让我的答案对 OP 很清楚,类似于问题中的Line(1-9) = False ;)。事实上,我什至不会使用Function(x) Not x,在这种情况下我会使用Any() 而不是All(),所以Not Any(Function(x) x)。我喜欢否定一个最终结果而不是每个值:)。
【解决方案2】:

或者使用数组方法TrueForAll:-

Dim BooleanArray() As Boolean = {False, False, etc... }

If Array.TrueForAll(BooleanArray, Function(fnTest) fnTest = False) Then
Debug.WriteLine("All FALSE")
End If

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2021-07-11
    • 2021-08-29
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多