2009-09-09 3 views
2

В моем проекте я использую Перечисление пример:имени перечисления с несколькими значениями

public enum NcStepType { Start = 1, Stop = 3, Normal = 2 } 

я читаю значение из базы данных, но иногда есть 0-значение в моей записи, поэтому я хочу, перечисление что выглядит как

public enum NcStepType { Start = 1 OR 0, Stop = 3, Normal = 2 } 

это возможно (в C#)?

ответ

2

Вы могли бы создать общий метод расширения, который обрабатывает неизвестные значения:

public static T ToEnum<T>(this int value, T defaultValue) 
    { 
     if (Enum.IsDefined(typeof (T),value)) 
      return (T) (object) value; 
     else 
      return defaultValue; 
    } 

Тогда вы можете просто позвонить:

int value = ...; // value to be read 

NcStepType stepType = value.ToEnum(NcStepType.Start); 

// if value is defined in the enum, the corresponding enum value will be returned 
// if value is not found, the default is returned (NcStepType.Start) 
+0

Чтобы сделать функцию более понятной, я бы назвал ее ToEnumOrDefault() (например, уже существующие расширения linq) – Oliver

2

Нет, в основном. Вы должны были бы дать ему одно из значений (предположительно 1) и интерпретировать другое (0) вручную.

2

Нет, это не так, и я не уверен, как это будет работать на практике.

Не можете ли вы просто добавить логику, которая отображает от 0 до 1 при чтении из БД?

+0

Это то, что я делаю прямо сейчас, но было бы проще, если бы мне не нужно было проверить, является ли это допустимым значением в моем списке перечислений. Я работаю с wcf-сервисом, и когда я пытаюсь добавить значение 0 к моему перечислению, он всегда дает мне ошибку Not Found – 2009-09-09 07:15:01

1

Нет, в C# перечисление может иметь только одно значение.

Нет ничего, что указывало бы, что значение в базе данных должно отображаться непосредственно на ваше значение перечисления. Вы могли бы легко присвоить значение Start всякий раз, когда вы читаете 0 или 1 из базы данных.

0

Нет решения в C#. Но вы можете взять 2-х этапов:

1. Установите значение вашего поля БД по умолчанию 1.
2. Обновление всех существующих 0 до 1.

2

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

public enum NcStepType 
{ 
    NotDefined = 0, 
    Start = 1, 
    Normal = 2, 
    Stop = 3, 
} 

И где-то в коде я бы сделать:

if(Step == NcStepType.NotDefined) 
{ 
    Step = NcStepType.Start; 
} 

Это делает код для чтения, и все знают, что происходит ... (надеюсь)

0

As насколько я знаю, вы можете написать это

enum NcStepType { Start = 0, Start = 1, Stop = 3, Normal = 2 } 

Единственная проблема - позже woul d не указывать, какой из Start использовался для переменной инициализации (он всегда выглядел бы как Start = 0).

+0

Я бы взял совет Оливера. – zzandy

Смежные вопросы