私は 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 がデリゲートではなく、コンパイルされないことを警告します。これを解決する方法はありますか?
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
List(of string).IndexOfメソッドは、文字列を入力として受け取ります。
関数Function (adr) Trim(UCase(adr)) LIKE "A"
は文字列ではなくデリゲートであるため、IndexOfメソッドで使用することはできません。
大文字と小文字を区別せずに検索を実行する場合は、次のLINQクエリで問題なく動作する可能性があります。
Test.First(Function (adr) adr.Equals("A", StringComparison.OrdinalIgnoreCase))