Использовать операторы set в C#

В этом примере показано, как переопределить эти операторы, чтобы упростить операции установки.

Чтобы переопределить эти операторы, вам нужно добавить код в класс. Вы можете добавить код с помощью частичного ключевого слова, но это работает только в том случае, если для каждой другой части класса используется ключевое слово, а класс HashSet Microsoft не использует это ключевое слово. Другими словами, вы не можете добавить код в существующий класс таким образом.

Чтобы обойти эту проблему, в этом примере получается класс Set, который наследуется от HashSet. Это также позволяет мне использовать немного более интуитивное имя класса Set.

В следующем коде показан полный класс Set.

public class Set : HashSet
{
    // Конструкторы.
    public Set()
        : base()
    {
    }
    public Set(IEnumerable enumerable)
        : base(enumerable)
    {
    }
    public Set(IEqualityComparer comparer)
        : base(comparer)
    {
    }
    public Set(IEnumerable enumerable, IEqualityComparer comparer)
        : base(enumerable, comparer)
    {
    }

    // Союз.
    public static Set operator |(Set A, Set B)
    {
        Set result = new Set(A);
        result.UnionWith(B);
        return result;
    }

    // Пересечение.
    public static Set operator &(Set A, Set B)
    {
        Set result = new Set(A);
        result.IntersectWith(B);
        return result;
    }

    // Xor.
    public static Set operator ^(Set A, Set B)
    {
        Set result = new Set(A);
        result.SymmetricExceptWith(B);
        return result;
    }

    // Подмножество.
    public static bool operator <(Set A, Set B)
    {
        return A.IsSubsetOf(B);
    }

    // Суперсет.
    public static bool operator >(Set A, Set B)
    {
        return A.IsSupersetOf(B);
    }

    // Содержит элемент.
    public static bool operator >(Set A, T element)
    {
        return A.Contains(element);
    }

    // Состоит из одного элемента.
    public static bool operator <(Set A, T element)
    {
        return (A > element) && (A.Count == 1);
    }
}

Класс начинается с конструкторов, которые просто вызывают конструкторы базового класса. Они необходимы, поэтому основная программа может создать Set, и поэтому операторы могут создавать новые объекты Set.

Операторы объединения двоичных (двух операндов), пересечений и XOR копируют первый операнд, а затем используют соответствующий метод HashSet для объединения копии со вторым набором.

Операторы подмножества и superset просто вызывают методы HashSet класса IsSubsetOf и IsSupersetOf.

Источник: http://csharphelper.com/blog/2015/03/use-set-operators-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector