Với mã này:Enum.GetValues (typeof (....)) không trả lại enum đúng giá trị
public enum Enum1
{
ONE,
TWO
}
public enum Enum2
{
A,
B
}
Mã này trả về một, hai:
foreach (Enum1 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
Nhưng mã này, thay vì thất bại (vì Enum2 e
được sử dụng với typeof(Enum1)
), trả về A, B:
foreach (Enum2 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
Tại sao vậy?
Tất nhiên là họ ... Silly me! Tôi quên rằng trong C# enums thực sự là ints ưa thích.Tôi đã được sử dụng nhiều hơn để enums của Java đó là các lớp học đầy đủ chính thức. Buồn rằng trình biên dịch không bắt nó mặc dù ... – JohnDoDo
@ JohnDoDo: Trình biên dịch không bắt được nó bởi vì "foreach (Enum2 e ..." thực hiện chuyển đổi ** rõ ràng ** - một diễn viên, hiệu quả - từ loại bộ sưu tập cho loại biến vòng lặp. Nó là hợp pháp để * cast * '(Enum2) enum1', và vì vậy nó là hợp pháp để làm điều tương tự ngầm với một * foreach *. Hãy nhớ, foreach được phát minh trước khi Generics, nếu bạn có một ArrayList của chuỗi, bạn muốn có thể nói 'foreach (string s trong myArrayList)' và có chuyển đổi rõ ràng được thực hiện tự động –