オブジェクトの複製を含むリストがあります。それを解決するには、リストを(C#で)HashSetに変換する必要があります。誰もが方法を知っていますか?
オブジェクトのクラスがEquals
とGetHashCode
をオーバーライドしていることを確認してから、List<T>
からHashSet<T>
コンストラクター 。
var hashSet = new HashSet<YourType>(yourList);
別の方法は
_var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
_
これは、SomeClass
がGetHashCode
およびEquals
を何らかの方法でオーバーライドする場合にのみ可能であることに注意してください。これは
_var uniqueObjs = new HashSet<SomeType>(yourOriginalList);
_
それ以外の場合は、独自のIEqualityComnparer
- classを実装し、distinctに渡すことができます。
Distinct()
アプローチを使用すると、リスト内のオブジェクトの個別のプロパティ値を検索することもできます。
_var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
_
その他いくつか...
タイプが_IEquatable<T>
_、Equals()
およびGetHashCode()
を正しく実装している場合、重複排除を自分で行う必要はありません。 LinqのDistinct()
を使用して、次のようにすることができます。
_myList = myList.Distinct().ToList();
_