TL;博士:Values
和uint
是不一樣,但它的敞篷明確。
switch
要求兩個值(切換的值以及與之比較的值)具有相同類型(或至少隱式可轉換)。您不能將枚舉值隱式轉換爲相應的整型(反之亦然)。出於同樣的原因,你不能將積分值賦給一個枚舉類型的變量:
enum Foo { Spam = 1, Egg = 2, Bar = 4 }
Foo test = 1;
這會導致編譯時異常:
錯誤CS0266:無法隱式轉換類型「詮釋」到「富」。存在明確的轉換(您是否缺少演員?)
你可以能做的就是值轉換成其他類型的內容:
Foo test = (Foo)1;
int test2 = (int)Foo.Egg;
這同樣適用於比較:
if(test == 1) { Console.WriteLine("It's 1!"); }
錯誤CS0019:運算符「= ='不能應用於'Foo'和'int'類型的操作數
if(test2 == Foo.Egg) { Console.WriteLine("It's an egg!"); }
錯誤CS0019:操作員「==」不能被施加到型「INT」的操作數和「富」
然而,鑄造中的一個值的類型中的另一個,它就像一個魅力:
if((int)test == 1) { Console.WriteLine("It's 1!"); }
if(test == (Foo)1) { Console.WriteLine("It's 1!"); }
if((Foo)test2 == Foo.Egg) { Console.WriteLine("It's an egg!"); }
if(test2 == (int)Foo.Egg) { Console.WriteLine("It's an egg!"); }
這是1!
這是1!
這是一個雞蛋!
這是一個雞蛋!
args.Progress是一個uint大概嗎? –
好吧,你也可以投入args.Progress到'Values';)'switch((Values)args.Progress)' –
@BenJackson是的,我添加了信息 – Nfear