如何检查List <T>元素是否包含具有特定属性值的项目


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

如何检查元素是否pricePublicList包含一定值。更确切地说,我要检查是否存在pricePublicModel.Size == 200?另外,如果该元素存在,如何知道它是哪一个?

编辑如果Dictionary更适合于此,那么我可以使用Dictionary,但我需要知道如何:)

Answers:


186

如果您有一个列表,并且想知道列表中存在与给定条件匹配的元素,则可以使用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
}

1
如果我不知道该值的属性怎么办?例如,我有一个显示“ 18.00”的列表项,我不知道它来自哪里,所以我想检查“ wich”属性是否具有此值?所以基本上,与此示例类似,我没有.size或.bar我想弄清楚
Haithem KAROUI 2014年

如果该项目不存在怎么办:索引值是什么?
BKSpurgeon '17

8
注意:如果该元素不存在,findIndex将返回–1。文档:msdn.microsoft.com/es-es/library/x1xzf2ca
v=vs.110).aspx

1
这就是@tomloprod的原因,他要检查索引是否大于零。如果(索引> = 0)。可能还写得好像(索引> -1)。
DannyC

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

6
严格地看这是否存在。
丹尼尔·怀特

3
这并不能真正回答问题。他说,how to know which one is it
乔治·约翰斯顿,

15
可能不回答他的问题,但是它确实对我有所帮助,因为我需要查看集合中是否已存在具有给定名称的对象。我期望有一个改进的.Contains方法-这正是LINQ表达式所做的。谢谢。
伊戈尔

3
它回答标题中的问题。OP在他的描述中解释说,他并不是真的很想要他想要的东西。不过,仍然有一个人,我们中的许多人通过Google找到了这个问题。我认为更重要的是我们能够找到他的头衔问题的真正答案。
MGOwen 2015年

5
如果有人尝试这样做,而.Any()无法识别,则需要使用System.Linq;进行添加在文件的顶部。
MGOwen

32

您可以使用存在

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

13

使用LINQ可以很容易做到这一点:

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

是否可以直接编辑符合此条件的元素?不是要获取它并存储在新对象中,而是直接更改?
ilija veselica 2011年

match可以修改返回的值(它是PricePublicModel列表中的对象)。
雅各布

您不应直接修改可以为null的对象。您可以随时这样做:match.Size = 300;foreach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;。但是,我自己不会将它用作单线。
艾米·韦斯特,

11

您实际上并不需要LINQ,因为List<T>它提供了一种完全可以满足您需要的方法:Find

搜索与指定谓词定义的条件匹配的元素,并返回整个内的第一个匹配项List<T>

示例代码:

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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.