Присвоение (не) постоянного значения для перечисления - PullRequest
2 голосов
/ 01 ноября 2010

Я пытаюсь назначить короткий для перечисления следующим образом:;

public enum ValueRepresentation : short
{
   ApplicationEntity = short.Parse("AE"),
   AgeString = short.Parse("AS")
}

Это, однако, не работаетНо есть ли быстрое решение, чтобы заставить это работать?

Cheers

Ответы [ 3 ]

5 голосов
/ 01 ноября 2010

Нет.Перечисляемые значения всегда являются константами времени компиляции.Если вы хотите, чтобы они были значениями, созданными в результате выполнения кода, вам придется автоматически генерировать исходный код.

(Как точно будет работать синтаксический анализ "AS"?)

Конечно, другойальтернатива - не использовать перечисления.Они могут быть не самым подходящим решением для того, что вы пытаетесь сделать.

1 голос
/ 01 ноября 2010

Как говорит Джон, это просто не сработает, и вместо этого вам может понадобиться автогенерация.

Если у вас есть список этих значений, таких как «AE», «AS» и т. Д., Посмотрите на шаблоны t4 (часть Visula Studio), было бы довольно легко написать простой шаблон для циклического просмотра списка и выплюнуть правильный код перечисления.

Документы MSDN находятся здесь: http://msdn.microsoft.com/en-us/library/bb126445.aspx

Я также нашел блог Олега Сыча очень полезным: http://www.olegsych.com/2007/12/text-template-transformation-toolkit/

Я бы также порекомендовал использовать VS2010, если это возможно, у него действительно хорошая поддержка для t4, но они все еще отлично работают под VS2008, если нет.

0 голосов
/ 01 ноября 2010

если вы хотите, чтобы перечисления имели короткие значения, объявите перечисление обычным способом со связанными значениями и приведите перечисление к короткому или короткому перечислению:

        public enum ValueRepresentation
    {
        AE =1,
        AS = 2
    }

    private short AsShort(ValueRepresentation value)
    {
        return (short)value;
    }
    private ValueRepresentation ShortAsValue(short number)
    {
        return (ValueRepresentation)number;
    }
...