List <T> öğesinin Belirli Özellik Değerine sahip bir öğe içerip içermediğini kontrol etme


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

Öğesinin pricePublicListbelirli bir değer içerip içermediğini kontrol etme . Daha net olmak gerekirse, ben orada olup olmadığını kontrol etmek istiyor pricePublicModel.Size == 200? Ayrıca, bu unsur varsa, hangisi olduğunu nasıl bilebilirim?

DÜZENLE Sözlük bunun için daha uygunsa Sözlük'ü kullanabilirim ama nasıl olduğunu bilmem gerekir :)

Yanıtlar:


186

Bir listeniz varsa ve listenin neresinde belirli bir kriterle eşleşen bir öğenin bulunduğunu bilmek istiyorsanız, FindIndexörnek yöntemini kullanabilirsiniz . Gibi

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

f => f.Bar == 17Eşleşen ölçütlere sahip bir yüklem nerede .

Senin durumunda yazabilirsin

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}

1
ya bu değerin niteliğini bilmiyorsam? Örneğin, "18.00" görüntüleyen bir liste öğem var, nereden geldiğini bilmiyorum, bu nedenle hangi niteliğin bu değere sahip olduğunu kontrol etmek istiyorum? temelde ve bu örneğe benzer şekilde .size veya .bar'a sahip değilim, anlamak istiyorum
Haithem KAROUI

ya öğe yoksa: indeks değeri ne olur?
BKSpurgeon

8
NOT: Eleman yoksa findIndexgeri dönecektir –1. Belgeler: msdn.microsoft.com/es-es/library/x1xzf2ca(v=vs.110).aspx
tomloprod

1
@tomloprod bu yüzden sıfırdan büyük veya sıfıra eşit bir indeksi kontrol ediyor. eğer (dizin> = 0). (İndex> -1) gibi de yazabilirdi.
DannyC

127
bool contains = pricePublicList.Any(p => p.Size == 200);

6
Bu kesinlikle var olup olmadığını görmek içindir.
Daniel A. White

3
Bu gerçekten soruya cevap vermiyor. Dedi ki,how to know which one is it
George Johnston

15
Sorusunu cevaplamayabilirdi, ama bana kesinlikle yardımcı oldu, çünkü koleksiyonumda belirli bir isimde bir nesnenin zaten var olup olmadığını görmem gerekiyordu. Geliştirilmiş bir .Contains yöntemi bekliyordum - ve bu LINQ ifadesinin yaptığı tam olarak budur. Teşekkür ederim.
Igor

3
Başlıktaki soruyu cevaplar . OP, açıklamasında , tam olarak istediğini söylediği şeyi gerçekten istemediğini açıklar . Yine de ondan biri var ve düzinelerce bu soruyu google aracılığıyla buluyoruz. Başlık sorusuna gerçek cevabı bulabilmemizin daha önemli olduğunu düşünüyorum.
MGOwen

5
Herhangi biri bunu denerse ve .Any () tanınmazsa, System.Linq kullanarak eklemeniz gerekir ; dosyanızın en üstünde.
MGOwen

32

Var olanı kullanabilirsiniz

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

13

LINQ kullanarak bunu yapmak oldukça kolaydır:

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

Bu koşulla eşleşen öğeyi doğrudan düzenlemek mümkün mü? Almak ve yeni nesnede saklamak değil, doğrudan değiştirmek mi?
ilija veselica

matchDöndürülen değeri (o değiştirilebilir PricePublicModellistede olan nesne).
Jacob

Boş olabilecek bir nesneyi doğrudan değiştirmemelisiniz. Her zaman yapabilirsiniz: match.Size = 300;veya foreach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;. Yine de bunu tek astar olarak kullanmazdım.
Amy West

11

Bu çünkü için Aslında LINQ gerekmez List<T>istediğini tam olarak yapan bir yöntem sağlar: Find.

Belirtilen yüklem tarafından tanımlanan koşullarla eşleşen bir öğeyi arar ve bütün içinde ilk geçtiği yeri döndürür List<T>.

Örnek kod:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);

4
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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.