В Java можно иметь методы внутри перечисления.
Есть ли такая возможность в C # или это просто коллекция строк и все?
Я пытался переопределить, ToString()
но он не компилируется. У кого-нибудь есть простой пример кода?
c#
enums
enumeration
Eya
источник
источник
Ответы:
Вы можете написать методы расширения для перечисляемых типов:
источник
Вы можете написать метод расширения для вашего перечисления:
Как: создать новый метод для перечисления (Руководство по программированию в C #)
источник
Другой вариант - использовать класс перечисления, созданный Джимми Богардом .
По сути, вы должны создать класс, который наследует от него
Enumeration
. Пример:Затем вы можете использовать его как enum с возможностью помещать в него методы (среди прочего):
Вы можете скачать его с NuGet .
Хотя эта реализация не является родной для языка, синтаксис (конструирование и использование) довольно близок к языкам, которые реализуют перечисления изначально лучше, чем C # ( например, Kotlin ).
источник
Нет. Вы можете создать класс, а затем добавить в него набор свойств, чтобы несколько эмулировать перечисление, но это не совсем то же самое .
Лучше было бы поместить ваши методы в класс отдельно от вашего emum.
источник
Поскольку я сталкивался и нуждался в полной противоположности enum to string, вот общее решение:
Это также игнорирует регистр и очень удобно для анализа REST-Response для вашего перечисления для обеспечения большей безопасности типов. Надеюсь, это кому-нибудь поможет
источник
C # Не позволяет использовать методы в перечислителях, так как это не основанный на классе принцип, а двумерный массив со строкой и значением.
Microsoft не рекомендует использовать классы, в этом случае используйте вместо этого (data) struct (ures); STRUCT задуман как легкий класс для данных и их обработчиков и может отлично справляться с функциями. C # и его компилятор не имеют возможностей отслеживания и эффективности, как известно из JAVA, где чем больше раз используется определенный класс / метод, тем быстрее он запускается и его использование становится «ожидаемым». В C # этого просто нет, поэтому для дифференциации используйте STRUCT вместо CLASS.
источник