Когда я возился с перечислениями, я обнаружил странное поведение одного из моих перечислений.Что вызывает это странное поведение перечисления?
Рассмотрим следующий код:
static void Main()
{
Console.WriteLine("Values");
Console.WriteLine();
foreach (Month m in Enum.GetValues(typeof(Month)))
{
Console.WriteLine(m.ToString());
}
Console.WriteLine();
Console.WriteLine("Names");
Console.WriteLine();
foreach (var m in Enum.GetNames(typeof(Month)))
{
Console.WriteLine(m);
}
Console.ReadLine();
}
public enum Month
{
January,
May,
March,
April
}
Этот код производит следующий вывод (как и ожидалось):
Values
January
May
March
April
Names
January
May
March
April
Теперь, позволяет сказать, что я немного измениться мое перечисление, например:
public enum Month
{
January = 3,
May,
March,
April
}
Если я запустил тот же код, будут получены те же результаты (что странно, как есть). Теперь, если я изменю свое перечисление, как это:
public enum Month
{
January = "g",
May,
March,
April
}
Я получаю следующее сообщение об ошибке компилятора:
Не удается неявно преобразовать «строка» типа для «» междунар.
Почему компилятор позволяет мне установить одно из значений перечисления на 3, но не на g? И почему первый результат точно так же, как второй? Если я изменил значение января, то почему GetValues
не печатает 3?
Enum - целые числа. В то время как вы видите слово 'January', оно имеет значение 1. (Или 3, как вы его назначили в своем втором примере) Но оно не может иметь значение' g'. – paqogomez
Прочитайте http://stackoverflow.com/a/16039343/380384, чтобы узнать, что вы можете сделать с помощью 'enum'. – ja72