.net - 如果字符串包含多个值

标签 .net vb.net

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

if myString.Contains("value1") or string.Contains("value2") or string.Contains("value3") 'etc...' then
end if

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

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

最佳答案

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

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

If values.Any(Function(s) myString.Contains(s)) Then
    '...
End If

老式的选择是使用循环:

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

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

Public Function ContainsAny(text As String, ParamArray values As String()) As Boolean
    Return values.Any(Function(s) text.Contains(s))
End Function
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

然后像这样调用它:

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

If Me.ContainsAny(myString, values) Then
    '...
End If

或者像这样:

If Me.ContainsAny(myString, "value1", "value2", "value3") Then
    '...
End If

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

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

或者像这样:

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

然后像这样调用它:

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

If myString.ContainsAny(values) Then
    '...
End If

或者像这样:

If myString.ContainsAny("value1", "value2", "value3") Then
    '...
End If

关于.net - 如果字符串包含多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61813776/

相关文章:

c# - 创建证书时未处理的加密异常

c# - 长时间运行的应用程序变慢

c# - 反序列化压缩字符串时出错(解析完成前遇到流结束)C#

.net - 如何将 COM 数组传递给托管代码?

SQL 命令.ExecuteReader vb.net

c# - 如何从引用其他程序集的命令提示符编译 C# DLL?

c# - 为什么我无法访问通过 POST 请求以编程方式添加的静态文件?

c# - .net - Array.Sort 和 Array.BinarySearch 的问题 - 文化和全局化

vb.net - .DrawImage 具有不透明度?

c# - 确定 GC.Collect() 正在收集什么