W języku C#, jeśli zdefiniujemy enum
, który zawiera element odpowiadający wartości ujemnej, a następnie sprawdzamy wartości enum
, wartość ujemna nie jest pierwsza, ale ostatnia. Dlaczego tak się dzieje? W innych językach (C, C++, Ada, itp.), Iterowanie po numerze enum
da ci kolejność, w której je zdefiniowałeś.Dlaczego wykluczeni członkowie wyliczeni są na końcu przez foreach?
MSDN ma dobry 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
Prawdopodobnie został posortowany jako niepodpisany. – SLaks
Udało ci się [* jeden * krok dalej niż wielu programistów] (http://stackoverflow.com/questions/18095665/a-lambda-expression-with-a-ssetement-body-cannot-be-converted-to-an -expression-t/18095816 # comment26488750_18095816) poprzez wprowadzenie do dokumentacji. Następnym razem przeczytaj: "Elementy tablicy są posortowane według binarnych wartości stałych wyliczeniowych (**, czyli z ich niepodpisaną wielkością **)." – jason
Z tego samego artykułu [MSDN] (http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx): "Elementy tablicy są posortowane według binarnych wartości stałych wyliczeniowych (czyli przez ich niepodpisaną wielkość). " – natenho