0

私は 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 がデリゲートではなく、コンパイルされないことを警告します。これを解決する方法はありますか?

4

2 に答える 2

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
于 2012-11-08T11:46:46.900 に答える
0

List(of string).IndexOfメソッドは、文字列を入力として受け取ります。

関数Function (adr) Trim(UCase(adr)) LIKE "A"は文字列ではなくデリゲートであるため、IndexOfメソッドで使用することはできません。

大文字と小文字を区別せずに検索を実行する場合は、次のLINQクエリで問題なく動作する可能性があります。

Test.First(Function (adr) adr.Equals("A", StringComparison.OrdinalIgnoreCase))
于 2012-11-08T11:42:44.263 に答える