Как задавать имена для enum?

Проблема такая же как здесь: .net - C# naming convention for enum and matching property - Stack Overflow

        public class MyClass
        {
            public enum MyMode { Mode1, Mode2 }

            private MyMode _myMode = MyMode.Mode1;

            public MyMode MyMode => _myMode; //не компилируется
        }

Там каждый предлагает свой вариант решения и не понятно, какой правильный :man_shrugging:
Пытался читать Code convensions, но там тоже не понятно, что делать в такой ситуации.
В WinForms есть энамы

        MessageBoxButtons
        MessageBoxDefaultButton
        MessageBoxIcon
        MessageBoxOptions

почему у одних есть s на конце, а у других нет? :thinking:

Видимо потому что дефолтная кнопка и иконка может быть только одна )

Ок, логично. А со свойствами что делать?

Можно просто сделать их не внутри класса и давать имена типа как у месседжбокса, уточняющие для чего оно, а в свойстве без этого. Енум SetupWizardState, а в классах про этот SetupWizard скорее всего хватит и просто State для свойства, если в нем вдруг нету кучи других стейтов (но тогда логично в нем давать более полные имена только этим свойствам, и имена для енумов определенных снаружи класса вроде могут совпадать с именем свойства, хотя и может быть менее удобно).

А смысл тогда за класс выносить, если названия будут разные? :man_shrugging: И вообще, в чём смысл выноса? :thinking:

Но ведь у Mode не может быть state :thinking:

А в чем смысл вноса?)
В некоторых языках вообще нельзя внутри классы/енумы описывать.
По-моему вполне достаточно неймспейсов (и папок).

Снаружи обращаться менее удобно, надо написать Something.Enum и автодополнение вряд ли выдаст сразу это в отличии от SomethingEnum.

Так это пример просто.
Вместо

Енум SetupWizardMode , а в классах про этот SetupWizard скорее всего хватит и просто Mode для свойства.

SetupWizardState это текущий шаг, например, из { Auth, InstallDirSelection, ComponentsSelection }.
SetupWizardMode это например { Basic, Advanced }.

Вот и я не понял. Зачем в класс энум пихать?
Это как класс в класс запихнуть. В чем суть?

Ну как зачем? Он логически к этому классу относится. Без класса он был бы нафиг не нужен. Вот и получается, что энам должен быть в классе.
А вынос его за класс проблему темы не решает.

Так много про что сказать можно.
Наверняка куча других классов не нужны без какого-то класса (Order и User, Product, в сервисе продающем что-то зарегенным юзерам), но это ж не значит, что надо всё вкладывать в друг друга. :clkolcrazy:

По-моему вкладывание в основном полезно только когда вложенный тип нужен только внутри (и private/protected).

А куда их тогда? :man_shrugging: По-моему, самое логичное это объявлять там, чему принадлежит.

Никуда, просто отдельно )
Можно даже в одном файле если так хочется.