为什么List(Of String).indexof(函数)不起作用?

时间:2012-11-08 11:36:46

标签: vb.net lambda

我非常喜欢Lambdas,但我确实遇到了这个问题:

Dim Test as New List/of String)
Test.add("A")
Test.add("B")

Dim Adress=Test.Indexof(Function (adr) (Trim(Ucase(Adr)) LIke "A")

编译器警告Stirng不是委托,也不会编译 - 任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

List.IndexOf获取T并返回该对象的索引。所以你不能在这里传递一个谓词。我假设您希望地址的第一个索引等于 - 忽略 - 大小写“A”。然后你可以使用Linq:

Dim matches = Test.Select(Function(Address, Index) New With {Address, Index}).
                   Where(Function(x) x.Address.ToUpper = "A")
If matches.Any() Then
    Dim firstMatch = matches.First()
    Dim firstMatchIndex As Int32 = firstMatch.Index '  0 
    Dim firstMatchAddress As String = firstMatch.Address ' "A"
End If

答案 1 :(得分:0)

List(of string).IndexOf方法将字符串作为输入。

函数Function (adr) Trim(UCase(adr)) LIKE "A"是委托,而不是字符串,因此您不能将它与IndexOf方法一起使用。

如果你想执行一个忽略大小写的搜索,那么下面的LINQ查询可能会对你有用。

Test.First(Function (adr) adr.Equals("A", StringComparison.OrdinalIgnoreCase))