例如,我想用下面代码中的Dogs for Cats(在这个例子中,字符串“蓬松”将总是从其他地方检索并设置为相同的Enum,在本例中将为't')。如何在Enum中指向一个变量?
该代码btw不起作用,但你可以看到我想要做的。
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将指向猫,有时指向狗(字符串“蓬松”将相应地不同)。因此,在这个例子中,我可以返回“蓬松”作为枚举,然后获得序列中的下一个项目,如果需要的话可以使用“毛茸茸”。如果CurrentEnum指向狗和字符串是“胖”,我可以去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();
}
}
不明确什么是你试图acheiev,什么是被推荐的结果? – sll
如何(typeof(CurrentEnum).equals(typeof(Cats)) –