如何检查 List<T> 元素是不是包含具有特定属性值的项目
Posted
技术标签:
【中文标题】如何检查 List<T> 元素是不是包含具有特定属性值的项目【英文标题】:how to check if List<T> element contains an item with a Particular Property Value如何检查 List<T> 元素是否包含具有特定属性值的项目 【发布时间】:2011-06-23 15:36:54 【问题描述】: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
?还有,如果这个元素存在,怎么知道是哪一个呢?
编辑如果字典更适合这个,那么我可以使用字典,但我需要知道如何:)
【问题讨论】:
【参考方案1】:如果您有一个列表,并且您想知道在列表中的哪个位置存在与给定条件匹配的元素,您可以使用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
【讨论】:
如果我不知道该值的属性怎么办?例如我有一个显示“18.00”的列表项,我不知道它来自哪里,所以我想检查一下哪个属性有这个值?所以基本上,和这个例子类似,我没有我想弄清楚的 .size 或 .bar 如果项目不存在怎么办:索引值是多少? 注意: 如果元素不存在,findIndex
将返回 –1
。文档:msdn.microsoft.com/es-es/library/x1xzf2ca(v=vs.110).aspx
@tomloprod 这就是他检查索引是否大于或等于零的原因。如果(索引> = 0)。也可以把它写成 (index > -1)。【参考方案2】:
bool contains = pricePublicList.Any(p => p.Size == 200);
【讨论】:
这个严格来说是看是否存在。 这并不能真正回答问题。他说,how to know which one is it
可能无法回答他的问题,但它确实对我有所帮助,因为我需要查看我的集合中是否已经存在具有给定名称的对象。我期待一个改进的 .Contains-method - 这正是这个 LINQ 表达式所做的。谢谢。
它回答了title中的问题。 OP 在他的描述中解释说,他并不真正想要他所说的他想要的东西。尽管如此,他中的一个,以及我们数十人通过谷歌找到了这个问题。我认为更重要的是我们能够找到他标题问题的真正答案。
如果有人尝试此操作并且 .Any() 无法识别,则需要在文件顶部添加 using System.Linq;。 【参考方案3】:
你可以使用存在
if (pricePublicList.Exists(x => x.Size == 200))
//code
【讨论】:
【参考方案4】:使用 LINQ 很容易做到这一点:
var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
// Element doesn't exist
【讨论】:
是否可以直接编辑符合此条件的元素?不是获取它并存储在新对象中,而是直接更改? 可以修改返回的match
值(它是列表中的PricePublicModel
对象)。
您不应该直接修改可以为空的对象。您总是可以这样做:match.Size = 300;
或 foreach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;
。不过,我自己不会将它用作单线。【参考方案5】:
您实际上并不需要 LINQ,因为 List<T>
提供了一种完全符合您要求的方法:Find
。
搜索与指定谓词定义的条件匹配的元素,并返回整个
List<T>
中的第一个匹配项。
示例代码:
PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
【讨论】:
【参考方案6】: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
【讨论】:
【参考方案7】:你也可以只用List.Find()
:
if(pricePublicList.Find(item => item.Size == 200) != null)
// Item exists, do something
else
// Item does not exist, do something else
【讨论】:
以上是关于如何检查 List<T> 元素是不是包含具有特定属性值的项目的主要内容,如果未能解决你的问题,请参考以下文章