假设我有一个类定义为:
public class DataHolder
{
public string PropA { get; set; }
public string PropB { get; set; }
public string PropC { get; set; }
public int PropD { get; set; }
}
并有一个 s 数组的实例DataHolder
声明为:
var x=new DataHolder[]{
new DataHolder(){PropA="A",PropB="X",PropC="J",PropD=1},
new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=3},
new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=5},
new DataHolder(){PropA="B",PropB="X",PropC="K",PropD=7},
new DataHolder(){PropA="B",PropB="Y",PropC="L",PropD=9},
new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=11},
new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=13},
new DataHolder(){PropA="C",PropB="Y",PropC="J",PropD=15},
new DataHolder(){PropA="C",PropB="Z",PropC="J",PropD=17}
};
我对它运行 LINQ GroupBy 查询,如下所示:
var t = x.GroupBy(c => new { A = c.PropA, B = c.PropB, C = c.PropC })
当我检查结果时,我发现 t 有 7 个元素,这是数组中不同 PropA、PropB、PropC 组合的数量,这就是我想要的效果(耶!)。但后来我想,它实际上不应该起作用,因为匿名类型的每个新实例都应该不等于其他实例,并且 t 应该有 9 个元素。为什么它像我最初认为的那样工作?