目前我遍历数组并检查是否有任何对象包含特定的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);
答案 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);