【问题标题】:VB.NET If-Else in ListVB.NET If-Else 在列表中
【发布时间】:2011-10-07 08:42:28
【问题描述】:

我只是想知道 VB.NET 中是否有一种方法可以查找列表中是否存在特定值或可以在我的 If-else 条件中使用的东西。我现在正在做的是使用这个:

If ToStatus = "1CE" Or ToStatus = "2TL" Or ToStatus = "2PM" Then
    'Do something
Else
    'Do something
End If

这很好用,但是如果将来我有数百个字符串要与ToStatus 进行比较呢?这将是一场噩梦!现在,如果存在这样的功能,我如何在语句中添加“And”和“Or”?

提前致谢!

【问题讨论】:

  • ToStatus 永远不会等于 1CE2TL
  • @SlaKs - 现在可以了! :)
  • 那你要检查它是否不在列表中。
  • 而不是Or,应该始终使用性能更高的OrElse

标签: vb.net list conditional-statements if-statement


【解决方案1】:

if {"1CE","2TL","2PM"}.Contains(ToStatus)

那么 ...... 结束我

【讨论】:

    【解决方案2】:

    你可以使用Contains函数:

    Dim someList = New List(Of String) From { ... }
    If Not someList.Contains(ToStatus) Then
    

    【讨论】:

    • 你能告诉我我应该包含什么包来让List工作吗?
    • List(Of T) 是核心 BCL 的一部分,在 mscorlib.dll 中的 System.Collections.Generic 中。
    • 嘿,我知道这是一个不同的问题,但我可以在不使用.add("My String") 的情况下创建List(Of T) 的实例吗?我的意思是把它们放在构造函数中? '因为我真正的目标是尽量减少我正在编写的代码。
    • New List(Of String) From {"Tom", "Dick", "Harry"}
    • 天哪!这真的帮助了我@SLaks!谢谢
    【解决方案3】:

    从列表中删除重复项

    Dim ListWithoutDuplicates As New List(Of String)
    For Each item As String In ListWithDuplicates
    
        If ListWithoutDuplicates.Contains(item) Then
    
         ' string already in a list - do nothing
    
        Else
    
            ListWithoutDuplicates.Add(item)
    
        End If
    
    Next
    

    【讨论】:

      【解决方案4】:

      你可以使用选择案例

      select case A
         case 5,6,7,8
             msgbox "you are in"
         case else
             msgbox "you are excluded"
      end select
      

      【讨论】:

        【解决方案5】:

        Slaks pointed out 一样,您可以在enumerable 集合上使用Contains。但我认为可读性会受到影响。我不在乎某些列表是否包含我的变量;我想知道我的变量是否在 某个列表中。您可以将 contains 包装在扩展方法中,如下所示:

        Imports System.Runtime.CompilerServices
        Module ExtensionMethods
        
            <Extension()> _
            Public Function [In](Of T)(ByVal item As T, ByVal ParamArray range() As T) As Boolean
                Return range.Cast(Of T).Contains(item)
            End Function
        
        End Module
        

        然后这样调用:

        If  ToStatus.In("1CE","2TL","2PM") Then
        

        【讨论】:

          【解决方案6】:

          对于 .NET 2.0

          我遇到了另一个问题,即 SLaks 解决方案不起作用,即如果您使用 .NET 2.0,其中方法 Contains 不存在。所以这里是解决方案:

          If (Array.IndexOf(New String() {"1CE", "2TL", "2PM"}), ToStatus > -1) Then
              'Do something if ToStatus is equal to any of the strings
          Else
              'Do something if ToStatus is not equal to any of the strings
          End If
          

          VB.NET - Alternative to Array.Contains?

          【讨论】:

            猜你喜欢
            • 2022-06-13
            • 1970-01-01
            • 1970-01-01
            • 2011-05-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-27
            相关资源
            最近更新 更多