web-dev-qa-db-fra.com

Comment vérifier si l'élément <T> de la liste contient un élément avec une valeur de propriété particulière

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>();

Comment vérifier si l'élément de pricePublicList contient une certaine valeur. Pour être plus précis, je veux vérifier s’il existe pricePublicModel.Size == 200? De plus, si cet élément existe, comment savoir de quoi il s'agit?

EDIT Si Dictionary convient mieux à cela, je pourrais utiliser Dictionary, mais j’aurais besoin de savoir comment faire :)

103
ilija veselica

Si vous avez une liste et que vous voulez savoir où se trouve un élément correspondant à un critère donné, vous pouvez utiliser la méthode d'instance FindIndex. Tel que

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

f => f.Bar == 17 est un prédicat avec les critères de correspondance.

Dans votre cas, vous pourriez écrire

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}
173
Anthony Pegram
bool contains = pricePublicList.Any(p => p.Size == 200);
113
Daniel A. White

Vous pouvez utiliser le existe

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}
24
Tiago

C'est assez facile à faire avec LINQ:

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}
13
Jacob

Vous n'avez pas réellement besoin de LINQ pour cela car List<T> fournit une méthode qui fait exactement ce que vous voulez: Find .

Recherche un élément qui correspond aux conditions définies par le prédicat spécifié et renvoie la première occurrence dans l'ensemble de List<T>.

Exemple de code:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
9
Mark Byers
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
}
3
Mahesh Velaga