как проверить, содержит ли элемент List <T>элемент со значением свойства - PullRequest
103 голосов
/ 08 февраля 2011
public class PricePublicModel
{
    public PricePublicModel() { }

    public int PriceGroupID { get; set; }
    public double Size { get; set; }
    public double Size2 { get; set; }
    public int[] PrintType { get; set; }
    public double[] Price { get; set; }
}

List<PricePublicModel> pricePublicList = new List<PricePublicModel>();

Как проверить, содержит ли элемент pricePublicList определенное значение. Чтобы быть более точным, я хочу проверить, существует ли pricePublicModel.Size == 200? Кроме того, если этот элемент существует, как узнать, какой это элемент?

РЕДАКТИРОВАТЬ Если словарь больше подходит для этого, то я мог бы использовать словарь, но мне нужно знать, как :)

Ответы [ 6 ]

173 голосов
/ 08 февраля 2011

Если у вас есть список, и вы хотите знать, где в списке существует элемент, соответствующий заданным критериям, вы можете использовать метод экземпляра FindIndex.Например,

int index = list.FindIndex(f => f.Bar == 17);

Где f => f.Bar == 17 - это предикат с соответствующими критериями.

В вашем случае вы можете написать

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}
113 голосов
/ 08 февраля 2011
bool contains = pricePublicList.Any(p => p.Size == 200);
23 голосов
/ 10 июля 2013

Вы можете использовать существующий

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}
13 голосов
/ 08 февраля 2011

Это довольно легко сделать с помощью LINQ:

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}
9 голосов
/ 08 февраля 2011

На самом деле LINQ вам не нужен, потому что List<T> предоставляет метод, который делает именно то, что вы хотите: Find.

Выполняет поиск элемента, который соответствует условиям, определенным указанным предикатом, и возвращает первое вхождение в пределах всего List<T>.

Пример кода:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
3 голосов
/ 08 февраля 2011
var item = pricePublicList.FirstOrDefault(x => x.Size == 200);
if (item != null) {
   // There exists one with size 200 and is stored in item now
}
else {
  // There is no PricePublicModel with size 200
}
...