Найдите все в списке пользовательских объектов
Вопрос
Ну, у меня есть объект под названием Mamamia, и внутри него есть некоторые строковые свойства.Я создал список этого объекта и заполнил его 150 элементами.
Я пытаюсь использовать List.FindAll, но я действительно не знаю, как это сделать.Я пробовал этот способ:
produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};
Я не знаю, зачем нужен делегат, я просто попытался скопировать из какого-то другого кода в Интернете.
Заранее спасибо!
Решение
Делегат предназначен для того, чтобы увидеть, соответствует ли значение, которое вы тестируете, тому, что вы ищете.Призыв к 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);
});
Редактировать:
Похоже, вам нужно только одно значение, и если вы используете .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
}