web-dev-qa-db-ja.com

VB.NETIf-リスト内のその他

リストに特定の値が存在するかどうか、またはIf-else条件で使用できるものを見つけることができるアプローチがVB.NETにあるかどうかを知りたいだけです。私が今していることはこれを使うことです:

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

これは問題なく機能しますが、将来ToStatusと比較する文字列が何百もある場合はどうなりますか?悪夢になります!さて、そのような機能が存在する場合、ステートメントに「And」と「Or」を追加するにはどうすればよいですか?

前もって感謝します!

11
dpp

Contains関数を使用できます。

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

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

その後.....終了I

6
Petr Moravek

選択したケースを使用できます

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

Slaksが指摘 のように、Containsコレクションでenumerableを使用できます。しかし、読みやすさが損なわれると思います。一部のリストに変数が含まれているかどうかは関係ありません。私の変数がinいくつかのリストであるかどうかを知りたいです。次のような拡張メソッドで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
3
KyleMit

。NET 2.0の場合

SLaksソリューションが機能しない別の問題に遭遇しました。つまり、メソッドContainsが存在しない.NET2.0を使用する場合です。だからここに解決策があります:

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-Array.Containsの代替?

0
dpp