2
List<List<String>> ls = new List<List<String>>();

List<String> l1 = new List<String>();
l1.Add("Peter");
l1.Add("123");
ls.Add(l1);

List<String> l2 = new List<String>();
l2.Add("Peter");
l2.Add("123");
ls.Add(l2);

ls = ls.Distinct().ToList();

ls の要素は 1 つだけだと思いますが、実際にはまだ 2 つの要素があります。考えられる理由は何ですか?

4

4 に答える 4

6

これは、実装されList<T>ていないため、標準の参照比較が実行されているためです。2 つの別個のリストがあるため、false が返されます。EqualsGetHashCode

独自のIEqualityComparer<List<string>>実装を記述して、Distinctメソッド パラメーターとして提供できます。比較子内でEnumerable.SequenceEqual) メソッドを使用して、リストの内容が同じかどうかを確認できます。

于 2013-08-13T07:18:54.383 に答える
1

List で使用される比較は、参照比較に基づいています。2 つのリストは異なるインスタンスであるため、同じではなく、distinct は異なると見なします。

于 2013-08-13T07:19:47.063 に答える