我有超过 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/