Trong C#, nếu chúng tôi xác định enum
có chứa thành viên tương ứng với giá trị âm và sau đó chúng tôi lặp qua các giá trị của enum
, giá trị âm không đến trước, nhưng cuối cùng. Tại sao điều đó lại xảy ra? Trong các ngôn ngữ khác (C, C++, Ada, v.v.), lặp lại qua một số enum
sẽ cung cấp cho bạn thứ tự mà bạn đã xác định nó.Tại sao các thành viên enum phủ định được liệt kê cuối cùng bởi foreach?
MSDN có tốt 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
Có thể nó đang được sắp xếp là chưa ký. – SLaks
Bạn đã thực hiện nó [* một * bước xa hơn nhiều lập trình viên] (http://stackoverflow.com/questions/18095665/a-lambda-expression-with-a-statement-body-cannot-be-converted-to-an -expression-t/18095816 # comment26488750_18095816) bằng cách tạo tài liệu. Lần sau, đọc nó: "Các phần tử của mảng được sắp xếp theo giá trị nhị phân của hằng số liệt kê (** có nghĩa là, bởi cường độ không dấu **)." – jason
Từ cùng một [MSDN] (http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx) bài viết: "Các phần tử của mảng được sắp xếp theo giá trị nhị phân của hằng số liệt kê (nghĩa là, bởi cường độ không dấu của họ). " – natenho