tl; dr:Values
und uint
sind nicht gleich, aber es ist ausdrücklich umwandelbar.
switch
müssen beide Werte (der Wert, der umgeschaltet wird und die Werte, mit denen er verglichen wird) vom selben Typ sein (oder zumindest implizit konvertierbar sein). Sie können einen Enum-Wert nicht implizit in den jeweiligen Integraltyp konvertieren (oder umgekehrt). Aus dem gleichen Grund können Sie nicht einen ganzzahligen Wert zu einem Enum-Typ Variablen zuweisen:
enum Foo { Spam = 1, Egg = 2, Bar = 4 }
Foo test = 1;
Dies führt zu einem Compiler-Ausnahme:
Fehler CS0266: Kann nicht implizit Typ ‚int‘ konvertieren "Foo". Eine explizite Konvertierung existiert (fehlt eine Besetzung?
)
Was Sie können Sie entweder Wert auf die andere Art gegossen wird:
Foo test = (Foo)1;
int test2 = (int)Foo.Egg;
Das gleiche gilt für den Vergleich:
if(test == 1) { Console.WriteLine("It's 1!"); }
Fehler CS0019: Operator ‚= = 'kann nicht auf Operanden vom Typ' Foo 'und' int 'angewendet werden
if(test2 == Foo.Egg) { Console.WriteLine("It's an egg!"); }
Fehler CS0019: Operator ‚==‘ auf Operanden vom Typ werden kann nicht ‚int‘ angelegt und ‚Foo‘
jedoch warf einer der Werte auf den Typ des anderen, und es wirkt wie ein Zauber:
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!"); }
es ist 1!
Es ist 1!
Es ist ein Ei!
Es ist ein Ei!
args.Progress ist ein Uint vermutlich? –
Nun, Sie könnten auch args.Progress zu einem 'Values';)' Schalter ((Werte) args.Progress) ' –
@BenJackson ja, ich habe die Info – Nfear