In C#, wenn wir eine enum
definieren, die ein Mitglied enthält, das einem negativen Wert entspricht, und dann über die Werte von enum
iterieren, kommt der negative Wert nicht an erster Stelle, sondern an letzter Stelle. Warum passiert das? In anderen Sprachen (C, C++, Ada usw.) erhalten Sie bei einer Iteration über enum
die Reihenfolge, in der Sie sie definiert haben.Warum werden negative enum-Mitglieder zuletzt von foreach aufgelistet?
MSDN hat eine gute example of this behavior:
using System;
enum SignMagnitude { Negative = -1, Zero = 0, Positive = 1 };
public class Example
{
public static void Main()
{
foreach (var value in Enum.GetValues(typeof(SignMagnitude)))
{
Console.WriteLine("{0,3} 0x{0:X8} {1}",
(int) value, ((SignMagnitude) value));
}
}
}
// The example displays the following output:
// 0 0x00000000 Zero
// 1 0x00000001 Positive
// -1 0xFFFFFFFF Negative
Es wird wahrscheinlich als unsigned sortiert. – SLaks
Sie haben es gemacht [* einen * Schritt weiter als viele Programmierer] (http://stackoverflow.com/questions/18095665/a-lambda-expression-with-a-statement-body-cannot-be-converted-to-an -expression-t/18095816 # comment26488750_18095816) mit der Dokumentation. Beim nächsten Mal lese es: "Die Elemente des Arrays sind nach den binären Werten der Aufzählungskonstanten sortiert (**, dh durch ihre vorzeichenlose Größe **)." – jason
Aus demselben [MSDN] (http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx) Artikel: "Die Elemente des Arrays sind nach den binären Werten der Aufzählungskonstanten sortiert (Das heißt, durch ihre vorzeichenlose Größe). " – natenho