我在这里面临一些问题。
目标是使用4个值对集合进行分组,这些值为Origin.PositionCoordinates.X
,Origin.PositionCoordinates.Y
,Destination.PositionCoordinates.X
,Destination.PositionCoordinates.Y
。
我收到错误说明:
匿名类型不能具有同名的多个属性。
我无法更改设计(无法更改类属性)。有解决方案可以解决这个问题吗?下面是我正在努力的示例代码。
private bool EdgeCollectionIsAppropriate(Dictionary<int, DijkstraEdge> theEdges)
{
if (theEdges.GroupBy(variable => new {
variable.Value.Origin.PositionCoordinates.X,
variable.Value.Origin.PositionCoordinates.Y,
variable.Value.Destination.PositionCoordinates.X,
variable.Value.Destination.PositionCoordinates.Y }).Any(x=>x.Count()>1))
{
logger.Debug("The edges list contains 2 or more edges with same destnation and origin position");
return false;
}
return true;
}
答案 0 :(得分:3)
请注意,您正在创建一个匿名类型,其中包含2个名为X
的属性。
而是给字段指定明确的名称:(你不必对所有这些字段做。只对具有冲突名称的那个就足够了)
theEdges.GroupBy(v=> new {
OriginX = v.Value.Origin.PositionCoordinates.X,
OriginY = v.Value.Origin.PositionCoordinates.Y,
v.Value.Destination.PositionCoordinates.X,
v.Value.Destination.PositionCoordinates.Y })
同样不清楚在if语句中写出所有内容。而是将查询结果存储在变量中,然后使用if语句:
var dupDestAndOrigin = theEdges.GroupBy(v=> new {
OriginX = v.Value.Origin.PositionCoordinates.X,
OriginY = v.Value.Origin.PositionCoordinates.Y,
v.Value.Destination.PositionCoordinates.X,
v.Value.Destination.PositionCoordinates.Y })
.Any(x => x.Count() > 1);
if(dupDestAndOrigin)
{
// TODO - log
return false;
}
return true;
答案 1 :(得分:0)
给他们一个不同的名字。您不能在同一对象中具有2个X和2Ys属性。
private bool EdgeCollectionIsAppropriate(Dictionary<int, DijkstraEdge> theEdges)
{
if (theEdges.GroupBy(variable => new { A=variable.Value.Origin.PositionCoordinates.X, B=variable.Value.Origin.PositionCoordinates.Y,C=variable.Value.Destination.PositionCoordinates.X, D=variable.Value.Destination.PositionCoordinates.Y }).Any(x=>x.Count()>1))
{
logger.Debug("The edges list contains 2 or more edges with same destnation and origin position");
return false;
}
return true;
}