我绝对是Linq的初学者.我有一个for循环,我想转换为Linq语句.该循环基本上对正在击中边缘的矩形执行命中测试.它不包括矩形.
private List<Rectangle> GetTouchingRects(List<Rectangle> rects, Edge edgeToCheck, Rectangle exclude)
{
List<Rectangle> hittingRects = new List<Rectangle>();
foreach (Rectangle rect in rects)
{
if (rect != exclude)
{
if (rect.Touch(edgeToCheck))
{
hittingRects.Add(rect);
}
}
}
return hittingRects;
}
Run Code Online (Sandbox Code Playgroud)
我可以编写非常基本的Linq查询,但我不知道这个.我主要对如何检查排除检查以及如何执行命中测试感到困惑.
任何帮助将不胜感激.
你基本上只是过滤两次.你可以用两个Where电话或一个电话来做到这一点:
return rects.Where(rect => rect != exclude)
.Where(rect => rect.Touch(edgeToCheck))
.ToList();
Run Code Online (Sandbox Code Playgroud)
要么:
return rects.Where(rect => rect != exclude && rect.Touch(edgeToCheck))
.ToList();
Run Code Online (Sandbox Code Playgroud)
使用您认为更具可读性的任何一个.您可以将其写为查询表达式:
return (from rect in rects
where rect != exclude && rect.Touch(edgeToCheck)
select rect).ToList();
Run Code Online (Sandbox Code Playgroud)
......但这对我来说似乎毫无意义.在LINQ中使用这两种语法是值得的.