Я пытаюсь написать простую строку перечисления. Очевидно, что я обычно использую стандартное перечисление, но мне нужны пробелы в строках.Альтернатива частным операторам неявного преобразования
Я попытался предотвратить строительство любых других экземпляров, сделав конструктор закрытым. Тем не менее, я также хотел неявное преобразование, чтобы сделать статические декларации проще/аккуратнее (последняя строка)
public class StringEnum
{
public static StringEnum Foo = "A Foo";
public static StringEnum Bar = "A Bar";
public static StringEnum Wibble = "A Wibble";
public static StringEnum Crotchet = "A Crotchet";
//etc...
//implicit cast to string
public static implicit operator string(StringEnum s) { return s.privateString; }
//private construction
private string privateString;
private StringEnum(string s) { this.privateString = s; }
private static implicit operator StringEnum(string s) { return new StringEnum(s); }
}
Этот неявный оператор не компилировать с «Модификатор частное не является допустимым для данного элемента». Я мог бы сделать его общедоступным, но тогда другой код может создавать не перечисляемые члены. Я мог бы просто избавиться и обновить статические экземпляры, но он выглядит намного опрятно, как указано выше.
Просто интересно, почему у вас не могут быть частные операторы конвертации, и может ли кто-нибудь предложить альтернативный способ, который удовлетворяет мой педантизм?
Зачем вам нужны пробелы в именах? Не могли бы вы просто добавить атрибут отображаемого имени для каждого элемента в обычном перечислении? Или поиск для преобразования в строковое представление? – DavidG
Вы ищете причину, отличную от того, что спецификация говорит: «Все операторы должны быть объявлены публичными и статическими». ? Как правило, они не поступают. –