Как я перегружаю оператор для перечисления в C#?

Вот обходное решение для Сублимированного текста 2 конкретно. Установка этот пакет , или через Управление Пакетом или вручную:

cd ~/.config/sublime-text-2/Packages

git clone https://github.com/xgenvn/InputHelper.git

После перезапуска Сублимата можно получить доступ к входному окну для составленных сочетаний клавиш с Ctrl + Сдвиг + Z . Хит Входит для вставки последовательности в позиции курсора.

33
задан Martin Backasch 25 July 2018 в 11:43
поделиться

3 ответа

Вы не можете этого сделать. Вы можете предоставлять только перегруженные операторы для классов и структур, которые вы определяете, и по крайней мере один из параметров должен иметь тип самого класса или структуры. То есть вы можете объявить перегруженный оператор сложения, который добавляет MyClass к MyEnum , но вы никогда не сможете сделать это с двумя значениями MyEnum . .

32
ответ дан 27 November 2019 в 17:43
поделиться

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

static bool IsLessThan(this SizeType first, SizeType second) {
}
12
ответ дан 27 November 2019 в 17:43
поделиться

Как уже упоминалось ранее, нельзя переопределить операторы в Enums, но вы можете сделать это в структуре. См. Пример ниже. Сообщите мне, помогло ли это:

public struct SizeType
{
    private int InternalValue { get; set; }

    public static readonly int Small = 0;
    public static readonly int Medium = 1;
    public static readonly int Large = 2;
    public static readonly int ExtraLarge = 3;

    public override bool Equals(object obj)
    {
        SizeType otherObj = (SizeType)obj;
        return otherObj.InternalValue.Equals(this.InternalValue);
    }

    public static bool operator >(SizeType left, SizeType right)
    {
        return (left.InternalValue > right.InternalValue);
    }

    public static bool operator <(SizeType left, SizeType right)
    {
        return (left.InternalValue < right.InternalValue);
    }

    public static implicit operator SizeType(int otherType)
    {
        return new SizeType
        {
            InternalValue = otherType
        };
    }
}

public class test11
{
    void myTest()
    {
        SizeType smallSize = SizeType.Small;
        SizeType largeType = SizeType.Large;
        if (smallSize > largeType)
        {
            Console.WriteLine("small is greater than large");
        }
    }
}
23
ответ дан 27 November 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: