按对象的所有属性分组
我试图从具有相同值的不同实例中获得不同的对象列表。我曾尝试使用独特和群体。我通过工作得到了该组,但我不想在更新对象时重写该函数。按对象的所有属性分组
// my object:
public class dummyObject
{
public int Id { get; set; }
public string Name { get; set; }
}
[TestMethod]
public void dummytest()
{
// my list:
var list = new List<dummyObject>
{
new dummyObject{ Id = 1, Name = "derp" },
new dummyObject{ Id = 2, Name = "derp" },
new dummyObject{ Id = 1, Name = "flerp" },
new dummyObject{ Id = 1, Name = "derp" },
};
// this wont work, unless I override the GetHashCode and Equals function
var result = list.Distinct(); // count = 4
Assert.AreEqual(4, result.Count());
// this will work if I group by all the properties that matter
var result2 = list
.GroupBy(x => new { x.Id, x.Name })
.Select(x => x.First());
Assert.AreEqual(3, result2.Count());
}
我不想指定所有重要的属性,因为可能会添加更多的属性,并且我希望保持这种低维护。我知道我会一直想要使用所有的属性。
有没有更好的方式做我想做的事情?或者我坚持使用Group by或覆盖GetHashCode
和Equals
函数?
您必须制作自己的比较器并覆盖GetHashCode和Equals函数。没有办法解决这个问题,如果你不告诉它,那么Distinct函数就不能在哪些属性中断言。这是一个对象,而不是原始毕竟
我想补充它是高度推荐实施既[IComparer的
我同意这一点 – Picnic8
我不知道的情况下,使用您的'dummyObject'类,但也许你需要重写'Equals' /'GetHashCode'方法,使'Distinct'会工作。 –
缓慢的方式是'.GroupBy(X => JsonConvert.SerializeObject(X))' –
你能'dummyObject'一个'struct'而不是'class'? – Vikhram