对于linq的循环

use*_*744 0 c# linq

我绝对是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查询,但我不知道这个.我主要对如何检查排除检查以及如何执行命中测试感到困惑.

任何帮助将不胜感激.

Jon*_*eet 9

你基本上只是过滤两次.你可以用两个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中使用这两种语法是值得的.