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

ili*_*ica 108 c# contains list

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>();
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*ram 178

如果您有一个列表,并且想要知道列表中存在哪个元素与给定条件匹配,则可以使用FindIndex实例方法.如

int index = list.FindIndex(f => f.Bar == 17);
Run Code Online (Sandbox Code Playgroud)

f => f.Bar == 17具有匹配标准的谓词在哪里.

在你的情况下,你可能会写

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

  • **注意:**如果元素不存在,`findIndex`将返回`-1`.文档:https://msdn.microsoft.com/es-es/library/x1xzf2ca(v = vs.110).aspx (6认同)
  • @tomloprod 这就是他检查索引是否大于或等于零的原因。如果(索引 &gt;= 0)。也可以写成 if (index &gt; -1)。 (3认同)
  • 如果我不知道该值的属性怎么办?例如,我有一个显示“18.00”的列表项,我不知道它来自哪里,所以我想检查它的属性是否具有此值?所以基本上,和这个例子类似,我没有 .size 或 .bar 我想弄清楚 (2认同)
  • 如果项目不存在怎么办:索引值是多少? (2认同)

Dan*_*ite 117

bool contains = pricePublicList.Any(p => p.Size == 200);
Run Code Online (Sandbox Code Playgroud)

  • 可能不回答他的问题,但它肯定对我有帮助,因为我需要查看我的收藏中是否已存在具有给定名称的对象.我期望一个改进的.Contains方法 - 这正是这个LINQ表达式所做的.谢谢. (14认同)
  • 严格来说,这是否存在. (5认同)
  • 如果有人尝试这个和**.任何()**都无法识别,你需要使用System.Linq;*添加*在文件的顶部. (4认同)
  • 这并没有真正回答这个问题.他说,"怎么知道它是哪一个" (3认同)
  • 它回答*标题*中的问题.OP在他的*描述*中解释说他并不真正想要他所说的他想要的东西.不过,还有一个人,我们几十个人通过谷歌找到了这个问题.我认为能够找到他的标题问题的真实答案更为重要. (3认同)
  • `.Any` 或 `.FindIndex` **哪个快**? (3认同)

Tia*_*ago 26

你可以使用exists

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 13

使用LINQ这很容易做到:

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


Mar*_*ers 10

你实际上并不需要LINQ,因为List<T>它提供了一个完全符合你想要的方法:Find.

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

示例代码:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);
Run Code Online (Sandbox Code Playgroud)


Mah*_*aga 5

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
}
Run Code Online (Sandbox Code Playgroud)