Например, я хотел бы заменить Dogs на Cats в приведенном ниже коде (строка «пушистый» в этом случае всегда будет извлекаться из другого места и устанавливаться из того же Enum, который будет «t» в этом примере).
Код, кстати, не работает, но вы можете видеть, что я пытаюсь сделать.
private enum Cats { Fluffy, Furry, Bald };
private enum Dogs { Big, Fat, Ugly };
sometype CurrentEnum = Cats;
var x = Enum.Parse(typeof(CurrentEnum), "fluffy", true);
ОБНОВЛЕНИЕ 1
Из ответовЯ не думаю, что ясно дал понять, чего я пытаюсь достичь, поэтому я внес некоторые изменения.
Иногда CurrentEnum будет указывать на Cats, иногда на Dogs (строка «пушистая» будетотличается соответственно).Следовательно, в этом примере я могу вернуть «пушистый» как Enum, а затем получить следующий элемент в последовательности, «Furry», если это будет необходимо.И если CurrentEnum указывает на Dogs и строка "Fat", я могу добраться до Dogs.Ugly.Имеет смысл?
ОБНОВЛЕНИЕ 2
Вот где я нахожусь:
class Program
{
enum Cats { Fluffy, Furry, Bald };
enum Dogs { Big, Fat, Ugly };
static Type CurrentEnum;
static void Main(string[] args)
{
CurrentEnum = typeof(Cats); // set elsewhere in program
Int32 i = (Int32)Enum.Parse(CurrentEnum, "fluffy", true);
Array a = CurrentEnum.GetEnumValues();
Console.WriteLine(a.GetValue(i + 1)); // next in sequence
}
}
Обратите внимание, что CurrentEnum можно установить в другом месте программы,но извлекается для определения следующего значения в перечислении при необходимости.Я нахожу немного странным, что мне нужно вывести мое перечисление в массив, прежде чем я смогу получить доступ к значениям.
ОБНОВЛЕНИЕ 3
Теперь я убедился, чтоэто лучшее решение:
class Program
{
enum Cats { Fluffy, Furry, Bald };
enum Dogs { Big, Fat, Ugly };
static Type CurrentEnum = typeof(Cats);
static void Main(string[] args)
{
Int32 i = (Int32)Enum.Parse(CurrentEnum, "Bald", true);
i = i == CurrentEnum.GetEnumValues().Length - 1 ? 0 : i++;
String nextValue = CurrentEnum.GetEnumValues().GetValue(i).ToString();
Console.WriteLine(nextValue);
Console.ReadKey();
}
}