質問

まあ、Mamamiaというオブジェクトがあり、その中に文字列プロパティがあります。このオブジェクトのリストを作成し、150個のアイテムを追加しました。

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

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

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

事前に感謝します!

役に立ちましたか?

解決

デリゲートは、テストしている値が探しているものかどうかを確認するためにあります。 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);
});

編集:

単一の値のみが必要であるように聞こえます。.NET3.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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top