如何检查列表元素包含一个特定属性值
问题描述:
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
?另外,如果这个元素存在,如何知道它是哪一个?如何检查列表<T>元素包含一个特定属性值
编辑如果词典是更适合这个,然后我可以使用字典,但我需要知道如何:)
答
如果您有一个列表,并且想要知道列表中存在与给定条件匹配的元素,可以使用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
}
答
这是很容易用做LINQ:
var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
// Element doesn't exist
}
答
bool contains = pricePublicList.Any(p => p.Size == 200);
答
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
}
答
你实际上并不需要LINQ的这个,因为List<T>
规定,不正是你想要的东西的方法:Find
。
搜索与指定的谓词所定义的条件相匹配的元素,并返回整个
List<T>
内的第一个匹配项。
示例代码:
PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
答
可以使用存在
if (pricePublicList.Exists(x => x.Size == 200))
{
//code
}
是否可以直接编辑符合这个条件的元素?不要获取它并存储在新对象中,而是直接更改? – 2011-02-08 18:57:52
可以修改返回的匹配值(它是列表中的PricePublicModel对象)。 – Jacob 2011-02-08 19:03:37
您不应该直接修改可以为空的对象。你总是可以这样做:`match.Size = 300;`或`foreach(var price inPublicList.Where(p => p.Size == 200))item.Size = 300;`。尽管如此,我并不会把它当作一个单独的内容来使用。 – 2011-02-08 19:23:46