.NET で一意のアイテムのみを許可するコレクションですか? 質問する

.NET で一意のアイテムのみを許可するコレクションですか? 質問する

C#には重複したアイテムを追加できないコレクションはありますか?たとえば、

public class Customer {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }

    public override int GetHashCode() {
        return (FirstName + LastName + Address).GetHashCode();
    }

    public override bool Equals(object obj) {
        Customer C = obj as Customer;
        return C != null && String.Equals(this.FirstName, C.FirstName) && String.Equals(this.LastName, C.LastName) && String.Equals(this.Address, C.Address);
    }
}

次のコードは(明らかに)例外をスローします。

Customer Adam = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Customer AdamDup = new Customer { Address = "A", FirstName = "Adam", LastName = "" };

Dictionary<Customer, bool> CustomerHash = new Dictionary<Customer, bool>();
CustomerHash.Add(Adam, true);
CustomerHash.Add(AdamDup, true);

しかし、KeyValuePairs なしで同様に一意性を保証するクラスはありますか?HashSet<T>そうすると思いましたが、ドキュメントを読むと、そのクラスは単なるセット実装のようです (考えてみてください)。

ベストアンサー1

HashSet<T>あなたが探しているのはこれです。マイクロソフト(強調追加):

このHashSet<T>クラスは、高性能な集合演算を提供します。集合とは、重複する要素を含まない、その要素は特に順序付けられていません。

注意:HashSet<T>.Add(T item)方法アイテムがコレクションに追加された場合はbool--を返し、アイテムが既に存在する場合は--を返します。truefalse

おすすめ記事