Найдите все в списке пользовательских объектов

StackOverflow https://stackoverflow.com/questions/1444749

  •  22-07-2019
  •  | 
  •  

Вопрос

Ну, у меня есть объект под названием 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top