C# 使用LINQ检查时动态更新记录
我想检查我的IEnumerable列表是否包含某些内容,并动态更新它 我现在正在做的是: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(
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)
{
}