我有这段代码:
Dim listCities As New List(Of String)
listCities.add("this is city London")
listCities.add("this city is called New York")
listCities.add("and another string with a city, this one Berlin")
当我尝试:
listCities.Contains("London")
返回false
,可能是因为没有完全匹配。
我如何测试listCities
是否包含字符串,当它是列表中字符串的子字符串时?
显然,我不想循环遍历listCities
答案 0 :(得分:3)
您可以这样使用IEnumerable.Any
if listCities.Any(Function(x) x.IndexOf("London") > -1)) Then
.. true ...
如果您在不同情况下使用伦敦拼写,则可以使用带有StringComparison.CurrentCultureIgnoreCase
参数的IndexOf版本
答案 1 :(得分:0)
你应该能够用这个来实现它:
listCities.Any(Function(x As String) x.Contains("London"));
答案 2 :(得分:0)
将 listCities 作为List,Contains将列表中的对象与您指定的对象(在本例中为字符串)进行比较。如果直接在String对象中使用Contains,它将在字符串对象中查找该特定字符串。
所以,你需要做的是迭代你的列表并使用Contains,使用Any返回一个布尔值:
listCities.Any(Function(cet) cet.Contains("London"))
可能更容易看到它像这样
For Each city In From city1 In listCities Where city1.Contains("London")
valueToReturn = True
Exit For
Next
答案 3 :(得分:-1)
这就是我的想法,它允许轻松重用以及可理解的长期代码格式。
Public Sub Test()
Dim l As New List(Of String)
' USAGE EXAMPLE
Dim index As Integer = l.IndexOfContainsText("london")
End Sub
<Extension()>
Public Function IndexOfContainsText(list As List(Of String), ContainsText As String) As Integer
Dim out As Integer = -1
For iQ As Integer = 0 To list.Count - 1
If list(iQ).Contains(ContainsText, StringComparison.InvariantCultureIgnoreCase) Then
Return iQ
End If
Next
Return out
End Function