Как проверить, содержит ли элемент List <T> элемент со специфическим значением свойства
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
? Кроме того, если этот элемент существует, как узнать, какой он есть?
EDIT Если словарь более подходит для этого, тогда я могу использовать словарь, но мне нужно было бы знать, как:)
Ответы
Ответ 1
Если у вас есть список, и вы хотите знать, где в списке существует элемент, соответствующий заданным критериям, вы можете использовать метод экземпляра 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
}
Ответ 2
bool contains = pricePublicList.Any(p => p.Size == 200);
Ответ 3
Вы можете использовать существующий
if (pricePublicList.Exists(x => x.Size == 200))
{
//code
}
Ответ 4
Это довольно легко сделать с помощью LINQ:
var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
// Element doesn't exist
}
Ответ 5
На самом деле вам не нужен LINQ, потому что List<T>
предоставляет метод, который делает именно то, что вы хотите: Find
.
Ищет элемент, который соответствует условиям, определенным указанным предикатом, и возвращает первое вхождение во всем List<T>
.
Пример кода:
PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
Ответ 6
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
}