In C#, se definiamo un enum
che contiene un membro corrispondente a un valore negativo e quindi iteriamo sopra i valori di enum
, il valore negativo non viene prima ma ultimo. Perché succede? In altre lingue (C, C++, Ada, ecc.), L'iterazione su un enum
ti darà l'ordine in cui l'hai definito.Perché i membri enum negativi sono enumerati per ultimi?
MSDN ha una buona 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
Probabilmente viene selezionato come non firmato. – SLaks
L'hai fatto [* un * passo oltre rispetto a molti programmatori] (http://stackoverflow.com/questions/18095665/a-lambda-expression-with-a-statement-body-cannot-be-converted-to-an -expression-t/18095816 # comment26488750_18095816) facendo riferimento alla documentazione. La prossima volta, leggilo: "Gli elementi dell'array sono ordinati in base ai valori binari delle costanti di enumerazione (** cioè, per la loro magnitudine senza segno **)." – jason
Dallo stesso articolo [MSDN] (http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx): "Gli elementi dell'array sono ordinati in base ai valori binari delle costanti di enumerazione (cioè con la loro grandezza senza segno). " – natenho