使用LINQ进行检查时,即时更新记录

时间:2018-06-04 11:49:21

标签: c# linq

我想检查我的IEnumerable列表是否包含某些内容并动态更新。

我现在在做什么:

private bool IsPointValid(Point point, IEnumerable<CustomRectangle> rectangles)
{
    return rectangles.Any(r => r.Rectangle.Contains(point) && !r.IsChecked);
}

我的代码正确检查了所有内容,但我的问题是,如何在完成整体检查后更改IsChecked的值,以便下次调用该函数时,IsChecked值会正确更新。

2 个答案:

答案 0 :(得分:0)

您可以将方法更改为以下内容:

private bool IsPointValid(Point point, IEnumerable<CustomRectangle> rectangles)
{
     var firstMatch = rectangles.FirstOrDefault(r => r.Rectangle.Contains(point) && !r.IsChecked);

     if (firstMatch != null)
         firstMatch.IsChecked = true;

     return firstMatch != null; 
}

答案 1 :(得分:0)

从你的问题来看,你似乎想要这样的东西,

假设您有一个对象列表(比如Demo类)

public class Demo
{
    public string Name;
    public bool flag;
    public Demo(string Name, bool flag)
    {
        this.Name = Name;
        this.flag = flag;
    }
}

并且您正在检查此列表是否包含具有特定值的某些元素以及更新其他值。

List<Demo> list = new List<Demo>();
list.Add(new Demo("amit", false));

//Note here we are also setting x.flag to true with checking conditions 
if(list.Any(x => x.Name == "amit"  && !x.flag && (x.flag = true)))
{

}

这里一旦流进入if,flag将被设置为true。

修改

如果列表中有多个条目满足相同的条件(检查条件),则上述代码将仅更新其中的第一个条目。如果您想要更新所有这些代码,请执行以下操作。

//here too we are setting flag to true, 
//but for all those objects which satisfy conditions
if(list.Where(x => x.Name == "amit" && !x.flag).Select(y => (y.flag=true)).Count() > 0)
{

}