2012-05-03 4 views
2

Мой коллега спросил меня сегодня, если можно получить значение перечислимого числа во время разработки. Я указал, что это легко сделать во время выполнения, используя бросок и немедленное окно.Получите числовое значение перечисления во время разработки?

Видимо, в VB6 это можно сделать с помощью быстрой информации, но есть ли способ сделать это на C# во время разработки?

Перечисление велико и сохраняет его в базе данных как int. У нас есть ошибка, поскольку мы подозреваем, что значения в базе данных больше не синхронизируются с перечислением (предположительно из-за того, что кто-то редактирует перечисление), и нам нужно знать, что на самом деле имеет значение в базе данных.

+0

Не ответ, но если вы в зависимости от целочисленных значений ваших перечислений, то пришло время вручную вводить эти значения вручную. – empi

ответ

1

Вы можете использовать окно Immediate во время разработки, если это не веб-приложение, а несколько других. Что-то в строке: String.Формат («{0: D}», enumValue)

+0

(int) namespace.enumType.enum работал для меня –

0

Если явные значения не заданы, члены перечисления начинаются с 0, увеличивая на 1. Вы можете использовать это, чтобы определить числовое значение перечисления.

Например:

enum Days 
{ 
Sunday, 
Monday, 
Tuesday, 
} 

В выше, воскресенье = 0, понедельник = 1, и так далее ....

+0

Это правда, но становится немного непрактичным, когда в перечислении содержится более 15. –

1

Почему бы не писать небольшую программу, которая принимает ваше перечисление и перебирает все поля перечисления, чтобы распечатать что-то вроде «EnumEntry = EnumValue». Это то, что вы получаете явное описание для всех полей вашего перечисления и можете проводить дальнейший анализ времени разработки.

Array values = Enum.GetValues(typeof(myEnum)); 

foreach(MyEnum val in values) 
{ 
    Console.WriteLine (String.Format("{0}: {1}", Enum.GetName(typeof(MyEnum), val), val); 
} 

здесь: C# Iterating through an enum? (Indexing a System.Array)

+0

Вот что я сделал бы. –

+1

Итак, если вы запрашиваете функцию IDE, дайте свою версию, вы можете искать VS-дополнения. По умолчанию эта функция отсутствует. – Tarion

1

Если у вас есть таблица базы данных с перечислениями, и вы хотите выровнять, что с перечисления в C#, я предлагаю вам сделать следующее:

enum Whatever 
{ 

    Value1 = 1, 
    Value2 = 2, 
    Value3 = 3 
} 

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

0

Да, это возможно и в C#, если вы явно не определяете значение, оно присваивает значения, начиная с 0, но вы также можете назначить свои значения;

enum Days 
{ 
Sunday=10, 
Monday=20, 
Tuesday=30, 
} 

и вы можете получить значения

console.WriteLine((int)Days.Sunday); //print 10 
console.WriteLine(Days.Sunday); //print Sunday 
+0

Я надеялся получить значения во время разработки. –

0

Я предполагаю, что вы хотите увидеть enum целые значения непосредственно в отладчике вместо их имен .

Вы можете достичь этого, используя DebuggerDisplayAttribute (имейте в виду, что визуализация необработанных объектов должна быть отключена). Просто украсить ваш enum заявление следующим образом:

[DebuggerDisplay("{ToString()} ({ToString(\"d\")})")] 
enum MyEnumToDebug 
{ 
} 

Когда вы будете парить переменную типа MyEnumToDebug внутри отладчика вы увидите как имя и целое значение.

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