Я хочу получить enum как int, но только если у него есть инициализатор, примененный к нему, так что я знаю, что значение явно определено и не является только значением по умолчанию. Это потому, что я использую перечисления для представления сопоставления с определенными int-кодами. Есть ли способ сделать это с перечислениями, или мне придется использовать что-то еще, как словарь?Возможно ли программно проверить, установлен ли на нем перечисление?
Вот пример - у меня есть следующее отображение:
яблоки = 1, Бананы = 2, Груши = 4, ананасы = 7
Я хочу, чтобы убедиться, что если перечисление является
public enum Fruit
{
Apples,
Bananas,
Pears,
Pineapples
}
, что он не будет пытаться получить значение INT, поскольку значение 1 в перечислении соответствует Бананы, а не яблоки, как это должно быть. Дайте мне знать, если мне нужно быть более ясными.
UPDATE:
Я использую NULLABLE перечислений, чтобы проверить, если значение было установлено (или неизвестный элемент), но это не то, что я спрашиваю здесь. Я не думаю, что я очень хорошо объясню это, поэтому попробую еще раз.
Я хочу, чтобы получить перечисление, о котором я ничего не знаю, возьмите базовый int, а затем сделайте что-нибудь с ним. Единственное, о чем я забочусь, это то, что перечисление было инициализировано, потому что оно говорит мне, что оно имеет фактические коды, определенные на нем. Я не возражаю, если он недействителен. Это одна из вещей, которые я проверяю. Но если это не null, я хочу убедиться, что код int явно определен. Код 0 полностью приемлем - даже если это означает, что он не определен, если это то, что указывает исходное сопоставление.
ДРУГОЙ UPDATE:
Я получил этот термин «инициализирован» от Microsoft documentation, и я думаю, что это вызывает путаницу. То, что я имел в виду, - это перечисление, в котором явно указано значение базовых ints. I.e.,
public enum MyEnum
{
One = 1,
Two = 2,
Three = 3
}
в отличие от того, который этого не делает. Т.е.,
public enum MyEnum
{
One,
Two,
Three
}
Я думаю, что это также приводит к путанице, что я имел в виду это как имеющий набор значения по умолчанию, которое легко спутать с ненулевыми перечислениями, которые имеют первый элемент, установленный по умолчанию.
Способ, которым я пользуюсь этим, заключается в том, что у меня есть метод, который использует отражение, чтобы получить значение свойств, которые имеют определенные пользовательские атрибуты. Для моих целей я хочу получить значение из перечислений, у которых есть коды, явно определенные на них. В противном случае я не могу предположить, что значение int имеет какое-либо деловое значение.
Я всегда устанавливаю значение 'Unknown = 0' в моем Enum будет сериализован, поэтому я всегда могу знать, что 0 = undefined. – asawyer
@asawyer хорошая идея, я всегда начинаю первое значение в 1. – usr
Это также хороший намек другим разработчикам, что это перечисление может иметь неинициализированные значения, в отличие от перечислений, которые никогда не будут. – asawyer