在 Linq 查询中使用 'out'
Using 'out' in Linq query
我正在处理 List
个 Component
个对象,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
,顾名思义,您正在尝试查找单个值...)
我正在处理 List
个 Component
个对象,componentList
。
Component
有方法 GetPosition
通过 component.GetPosition(out position, out orientation)
组件的 returns 位置。
我可以通过 position.X, position.Y, position.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
,顾名思义,您正在尝试查找单个值...)