デリゲートは、テストしている値が探しているものかどうかを確認するために存在します。への呼び出し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
}