同じ値を持つ異なるインスタンスから別のオブジェクトリストを取得しようとしています。私は別名とグループを使用しようとしました。私は作業によってグループを手に入れましたが、オブジェクトを更新するときに関数を書き直したくありません。オブジェクトのすべてのプロパティでグループ化する
// 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());
}
さらに重要なプロパティをすべて指定する必要はありません。追加が増える可能性があり、このメンテナンスを抑えたいからです。私はいつもすべてのプロパティを使いたいと思っています。
私がやろうとしていることをする良い方法がありますか?または、GetHashCode
とEquals
の機能をグループ化またはオーバーライドしてスタックしていますか?
'dummyObject'クラスのユースケースについてはわかりませんが、' Distinct'メソッドを 'Equals' /' GetHashCode'メソッドでオーバーライドする必要があります。作業。 –
遅い方法は '.GroupBy(x => JsonConvert.SerializeObject(x))' –
'dummyObject'を' class'の代わりに 'struct'にすることができますか? – Vikhram