使用Linq / C#检查数组是否包含属性id

时间:2018-03-11 17:02:58

标签: c#

目前我遍历数组并检查是否有任何对象包含特定的id。这些对象具有Id属性。

public class MyObj
{
    public int Id {get; set;}
}

因此,在检查锁定状态时,我会选择此代码

bool IsUnlocked(int targetId) {
 bool isUnlocked = false;

 for (int i = 0; i < myObjs.Length; i++) // loop trough the objects
 {
  MyObj current = myObjs[i];

  if (current.Id == targetId) // a match
  {
   isUnlocked = true;
   break;
  }
 }

 return isUnlocked;
}

我认为这可以通过Linq更聪明地完成。我试过了

bool isUnlocked = myObjs.Contains(current => current.Id == targetId);

但这是一种错误的语法。我是否必须设置类似

的内容
myObjs.First(current => current.Id == targetId);

2 个答案:

答案 0 :(得分:3)

Contains没有代理类型,因此将current => current.Id == targetId的行为传递给它将无法编译。

对于myObjs.First(current => current.Id == targetId);,这将返回满足提供的谓词的第一个对象,而不是返回一个bool指示是否有任何项目满足所提供的谓词。

解决方案是使用Any扩展方法。

bool isUnlocked = myObjs.Any(current => current.Id == targetId);

答案 1 :(得分:1)

Array课程中还有一个专门的方法 - Array.Exists

 isUnlocked = Array.Exists(myObjs, elem => elem.Id == targetId);