例如,我想用下面代碼中的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)) –