jak sprawdzić, czy Element List zawiera element o określonej wartości właściwości

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

Jak sprawdzić, czy element pricePublicList zawiera określoną wartość. Żeby być bardziej precyzyjnym, chcę sprawdzić, czy istnieje pricePublicModel.Size == 200? Ponadto, jeśli ten element istnieje, Jak wiedzieć, który to jest?

Edytuj jeśli Słownik jest do tego bardziej odpowiedni to mógłbym użyć słownika, ale musiałbym wiedzieć jak :)

Author: John Saunders, 2011-02-08

6 answers

Jeśli masz listę i chcesz wiedzieć, gdzie w liście istnieje element spełniający podane kryteria, możesz użyć metody instancji FindIndex. Takie jak

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

Gdzie f => f.Bar == 17 jest predykatem z pasującymi kryteriami.

W Twoim przypadku możesz napisać

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}
 167
Author: Anthony Pegram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 18:57:19
bool contains = pricePublicList.Any(p => p.Size == 200);
 99
Author: Daniel A. White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 18:54:35

Możesz użyć exists

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}
 21
Author: Tiago,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 14:32:13

Jest to dość łatwe do zrobienia przy użyciu LINQ:

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}
 12
Author: Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 18:54:30

Nie potrzebujesz do tego LINQ, ponieważ List<T> zapewnia metodę, która robi dokładnie to, co chcesz: Find.

Wyszukuje element, który odpowiada warunkom określonym przez określony predykat i zwraca pierwsze wystąpienie w całym List<T>.

Przykładowy kod:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
 9
Author: Mark Byers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 18:59:00
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
Author: Mahesh Velaga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 18:55:34