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 :)
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
}
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);
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
}
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
}
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);
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
}
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