Делегат должен видеть, является ли значение, которое вы тестируете, тем, что вы ищете. Вызов Remove
выглядит тревожно, как будто он изменяет значение - это редко бывает хорошо, когда вы просматриваете список. Я думаю, если это строка, то это не так уж плохо, хотя, возможно, это не то, что вам нужно ...
Какие типы задействованы и что вы ищете? О, а вы используете C # 3 и / или .NET 3.5? Это упростит задачу (даже C # 3 против .NET 2.0 означает, что вы можете использовать лямбда-выражение вместо анонимного метода).
Что происходит, когда вы запускаете код в данный момент? Если он просто ничего не находит, это может просто потому, что вы проверяете равенство ссылок (если SelectedValue
возвращает object
).
Попробуйте это:
produto = products.FindAll(delegate(Mamamia cv) {
return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});
EDIT:
Звучит так, будто вам нужно только одно значение, и если вы используете .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
}