在 Linq 查询中使用 'out'

Using 'out' in Linq query

我正在处理 ListComponent 个对象,componentList

Component 有方法 GetPosition 通过 component.GetPosition(out position, out orientation) 组件的 returns 位置。 我可以通过 position.X, position.Y, position.Z.

得到 X、Y、Z

我有一个单独的 List<CSVPart> 从 CSV 文件导入。每个列表项也有 X、Y、Z。我想从 CSV 部分列表中找到与 X、Y、Z 匹配的 Component

我试过:

foreach (CSVPart p in csvParts)
{
    foundComponent = componentList
        .Where(c => c.Name == p.PartNumber & ... == p.X & ... == p.Y & ... == p.Z
        )
}

其中 Name 对应 PartNumber 和 ... 对应我呆呆地盯着屏幕。 我试过嵌套后续语句来比较 {} 中的 X、Y、Z,但我试过的都没有用。如何将 out 结果放入此 Linq 查询中?在此先感谢您的帮助。

我建议您不要尝试在单个表达式中执行此操作。相反,要么编写一个方法来执行你想要的匹配并在你的查询中引用它,要么使用 block-bodied lambda:

foreach (CSVPart p in csvParts)
{
    var foundComponent = componentList.FirstOrDefault(c =>
    {
        // Avoid finding the position if the name doesn't match.
        if (c.Name != p.PartNumber)
        {
            return false;
        }
        c.GetPosition(out var position, out var _);
        return position.X == p.X && position.Y == p.Y && position.Z == p.Z;
    });
    // foundComponent will be null or the first match
}

(我已经从 Where 更改为 FirstOrDefault,顾名思义,您正在尝试查找单个值...)