Различия между перечислениями в C# и VB.NET

У нас есть коды символов прежней версии, которые мы хотим сохранить как числа в новой системе. Для увеличения readibility и общего понимания в коде для devs создание миграции я хочу сделать Перечисления как это...

Public Enum Status As Short
    Open = AscW("O")
    Closed = AscW("C")
    Pending = AscW("P")
    EnRoute = AscW("E")
End Enum

С этой установкой код будет читаем (вообразить If Record.Status = Status.Open), и все же значения будут сохранены в базе данных как небольшие числа, таким образом, это будет эффективно. Однако... Я - парень VB.NET, но все хотят кодировать в C#, таким образом, мне нужен этот вид структуры в C#.

После поиска с помощью Google я обнаружил общую.NET, эквивалентную из AscW Convert.ToInt32("C"). Когда я пытаюсь использовать тот оператор в перечислении, я получаю ошибку компилятора "Необходимое Константное выражение".

Как я могу сделать это в C#? Существует ли лучший путь?

5
задан Josh Stodola 14 January 2010 в 16:04
поделиться

2 ответа

Я только что просмотрел эту же проблему с оболочкой .Net для библиотеки FreeImage. Я создал две конфигурации сборки: одну для x86 и одну для x64 для проекта, ссылающегося на управляемую оболочку. Я добавил разделы условной копии msbuild в цель AfterBuild файла проекта так:

  <Target Name="AfterBuild">
    <Copy Condition="'$(Platform)' == 'X86'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x86\FreeImage.dll" DestinationFolder="$(TargetDir)" />
    <Copy Condition="'$(Platform)' == 'X64'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x64\FreeImage.dll" DestinationFolder="$(TargetDir)" />
  </Target>
-121--4349624-

Вызов метода не является постоянным выражением. Попробуйте это:

public enum Status { 
   Open = 'O',
   Closed = 'C',
   Pending = 'P',
   EnRoute = 'E'
}

Причина AscW работает в VB в том, что это внутренняя вещь, которую компилятор VB понимает и оценивает во время компиляции и считается компилятором постоянным выражением. Даже в VB Convert.ToInt32 не будет работать.

Чтобы процитировать визуальную базовую спецификацию :

11,2 Константные выражения

Константное выражение - это выражение, значение которого может быть полностью вычислено во время компиляции. [...] В постоянных выражениях допускаются следующие конструкции:

[...]

  • следующие функции во время выполнения:

    • Microsoft. VisualBasic. Последовательности. ChrW
    • Microsoft. VisualBasic. Последовательности. Chr, если постоянная величина между 0 и 128
    • Microsoft. VisualBasic. Последовательности. AscW, если постоянная последовательность не пуста
    • Microsoft. VisualBasic. Последовательности. Asc, если постоянная последовательность не пуста
10
ответ дан 18 December 2019 в 14:46
поделиться

Попробуйте это:

public enum Status
{
    Open    = 'O',
    Closed  = 'C',
    Pending = 'P',
    EnRoute = 'E'
}
3
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

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