0

さて、私は Mamamia というオブジェクトを取得しました。その中にいくつかの文字列プロパティがあります。このオブジェクトのリストを作成し、150 項目を入力しました。

List.FindAll を使用しようとしていますが、方法がわかりません。私はこの方法を試しました:

produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};

デリゲートがそこにある理由はわかりません。インターネット上の他のコードからコピーしようとしました。

前もって感謝します!

4

1 に答える 1

1

デリゲートは、テストしている値が探しているものかどうかを確認するために存在します。への呼び出しRemoveは心配そうに値を変更しているように見えますが、リストを調べているときはめったに良いことではありません。それが文字列であれば、それほど悪くはないと思いますが、あなたが求めているものではないかもしれません...

関連するタイプは何ですか?また、何を探していますか? ああ、C# 3 や .NET 3.5 を使用していますか? そうすれば簡単になります (.NET 2.0 に対する C# 3 でも、匿名メソッドの代わりにラムダ式を使用できることを意味します)。

現時点でコードを実行するとどうなりますか? 何も見つからない場合は、参照の等価性をテストしている可能性がありSelectedValueます ( を返す場合object)。

これを試して:

produto = products.FindAll(delegate(Mamamia cv) {
    return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});

編集:

単一の値のみが必要なように聞こえますが、.NET 3.5 を使用している場合は、そもそも LINQ を使用する方が慣用的です。私は使うだろう:

string selectedText = (string) cmbPackage.SelectedValue;
Mamamia item = products.FirstOrDefault
                  (cv => cv.LocalPackage.Remove(1,21) == selectedText);
if (item != null)
{
    // Found it; otherwise item will be null
}
于 2009-09-18T14:07:07.903 に答える