C# 使用LINQ检查时动态更新记录

C# 使用LINQ检查时动态更新记录,c#,linq,C#,Linq,我想检查我的IEnumerable列表是否包含某些内容,并动态更新它 我现在正在做的是: private bool IsPointValid(Point point, IEnumerable<CustomRectangle> rectangles) { return rectangles.Any(r => r.Rectangle.Contains(point) && !r.IsChecked); } private bool IsPointValid(

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

我现在正在做的是:

private bool IsPointValid(Point point, IEnumerable<CustomRectangle> rectangles)
{
    return rectangles.Any(r => r.Rectangle.Contains(point) && !r.IsChecked);
}
private bool IsPointValid(点-点,IEnumerable矩形)
{
返回矩形。任意(r=>r.Rectangle.Contains(point)和&!r.IsChecked);
}

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

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

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; 
}
private bool IsPointValid(点-点,IEnumerable矩形)
{
var firstMatch=rectangles.FirstOrDefault(r=>r.Rectangle.Contains(point)和&!r.IsChecked);
if(firstMatch!=null)
firstMatch.IsChecked=true;
返回firstMatch!=null;
}

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

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

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

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)))
{

}

你的数据来自哪里?背景是什么?另请参见如何提问
var bob=rectangles.FirstOrDefault(r=>r.Rectangle.Contains(point)&&&!r.IsChecked);如果(bob!=null){bob.IsChecked=true;}返回bob!=无效需要更新哪一个?仅指点位于矩形中的点,或所有点。无论哪种方式,Linq都不适用于变异集合,我建议您只使用
foreach
循环。您可能真的很想对其进行大量的注释,因为许多人会忽略
x.flag=true
正在做的事情。@mjwills感谢您指出这一点。我在这里添加了一条注释,这将只设置第一个匹配的属性,如果可能有多个这样的点(但是在矩形的情况下似乎不太可能,但在一般情况下)?
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)))
{

}
//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)
{

}