如果字符串包含多个值

hew*_*man 2 .net vb.net

我有超过 40 个值来检查我的字符串是否包含其中之一

if myString.Contains("value1") or string.Contains("value2") or string.Contains("value3") 'etc...' then
end if
Run Code Online (Sandbox Code Playgroud)

对我来说一点也不方便,我如何在 Contains() 中放入多个值?

如果有比 Contains() 更好的东西那就更好了

jmc*_*ney 5

Contains只接受一个值,因此您必须为每个值调用一次。诀窍是编写代码时只编写该调用一次,但它会执行多次。在 LINQ 时代,您可以这样做:

Dim values = {"value1", "value2", "value3"}

If values.Any(Function(s) myString.Contains(s)) Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)

老式的选择是使用循环:

Dim values = {"value1", "value2", "value3"}
Dim containsAny = False

For Each value in values
    If myString.Contains(value) Then
        containsAny = True
        Exit For
    End If
Next

If containsAny Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)

您可以将其中任何一个放入方法中:

Public Function ContainsAny(text As String, ParamArray values As String()) As Boolean
    Return values.Any(Function(s) text.Contains(s))
End Function
Run Code Online (Sandbox Code Playgroud)
Public Function ContainsAny(text As String, ParamArray values As String()) As Boolean
    For Each value in values
        If text.Contains(value) Then
            Return True
        End If
    Next

    Return False
End Function
Run Code Online (Sandbox Code Playgroud)

然后这样称呼它:

Dim values = {"value1", "value2", "value3"}

If Me.ContainsAny(myString, values) Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)

或者像这样:

If Me.ContainsAny(myString, "value1", "value2", "value3") Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)

您还可以编写扩展方法,如下所示:

Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension>
    Public Function ContainsAny(source As String, ParamArray values As String()) As Boolean
        Return values.Any(Function(s) source.Contains(s))
    End Function

End Module
Run Code Online (Sandbox Code Playgroud)

或者像这样:

Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension>
    Public Function ContainsAny(source As String, ParamArray values As String()) As Boolean
        For Each value In values
            If source.Contains(value) Then
                Return True
            End If
        Next

        Return False
    End Function

End Module
Run Code Online (Sandbox Code Playgroud)

然后这样称呼它:

Dim values = {"value1", "value2", "value3"}

If myString.ContainsAny(values) Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)

或者像这样:

If myString.ContainsAny("value1", "value2", "value3") Then
    '...
End If
Run Code Online (Sandbox Code Playgroud)