2011-02-08 65 views
85
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>元素包含一个特定属性值

编辑如果词典是更适合这个,然后我可以使用字典,但我需要知道如何:)

回答

152

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

这是很容易用做LINQ:

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

是否可以直接编辑符合这个条件的元素?不要获取它并存储在新对象中,而是直接更改? – 2011-02-08 18:57:52

+0

可以修改返回的匹配值(它是列表中的PricePublicModel对象)。 – Jacob 2011-02-08 19:03:37

+0

您不应该直接修改可以为空的对象。你总是可以这样做:`match.Size = 300;`或`foreach(var price inPublicList.Where(p => p.Size == 200))item.Size = 300;`。尽管如此,我并不会把它当作一个单独的内容来使用。 – 2011-02-08 19:23:46

90
bool contains = pricePublicList.Any(p => p.Size == 200); 
3
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 
} 
9

你实际上并不需要LINQ的这个,因为List<T>规定,不正是你想要的东西的方法:Find

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

示例代码:

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

可以使用存在

if (pricePublicList.Exists(x => x.Size == 200)) 
{ 
    //code 
} 
相关问题