2014-11-09 17 views
6

Có cách nào để tôi có thể thay đổi giá trị enum vào thời gian chạy không?Đặt giá trị enum khi chạy trong C#

ví dụ tôi đã theo loại

enum MyType 
{ 
    TypeOne, //=5 at runtime 
    TypeTwo //=3 at runtime 
} 

Tôi muốn khi chạy thiết 5-TypeOne và 3-TypeTwo.

+1

Điều này là không thể. – DavidG

+3

Tại sao bạn lại muốn điều này? – Rotem

+5

+1 Tôi không hiểu các cử tri xuống. Đừng bỏ phiếu cho câu hỏi vì câu trả lời là 'không' bỏ phiếu cho câu trả lời đó là 'không' thay thế. – Myster

Trả lời

5

Chỉ cần tham khảo trợ giúp MSDN HERE

  • Một kiểu liệt kê (còn được gọi là liệt kê hoặc một enum) cung cấp một cách hiệu quả để xác định một tập hợp các hằng số tích phân có tên có thể được gán cho một biến.

Cũng HERE

Trong mục Lập trình mạnh mẽ - Cũng như với bất kỳ liên tục, tất cả các tham chiếu đến các giá trị cá nhân của một enum được chuyển đổi thành các chữ số ở thời gian biên dịch.

Vì vậy, bạn cần căn chỉnh lại ý tưởng của mình là Enum và sử dụng nó cho phù hợp.

Để trả lời câu hỏi của bạn - Không, điều đó là không thể.

0

Enums được biên dịch thành các trường tĩnh liên tục, giá trị của chúng được biên dịch thành bạn, vì vậy không, không thể thay đổi chúng. (Giá trị không đổi của họ thậm chí có thể được biên dịch vào những nơi mà bạn tham khảo chúng.)

Ví dụ lấy enum này:

enum foo 
{ 
    Value = 3 
} 

Sau đó, bạn có thể nhận được hiện trường và thông tin của mình như thế này:

var field = typeof(foo).GetField("Value", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); 
Console.WriteLine(field.GetValue(null)); 
Console.WriteLine(field.Attributes); 
+0

Không chính xác, chúng được biên dịch dưới dạng hằng số, không phải là trường tĩnh. – DavidG

+0

@DavidG Tôi đã thêm mã mẫu. Chúng hoạt động giống như các trường. Các hằng số được thực hiện dưới dạng các trường. – fejesjoco

3

Như những người khác đã chỉ ra, câu trả lời là không.

Bạn tuy nhiên có thể có thể cấu trúc lại mã của bạn để sử dụng một lớp thay vì:

public sealed class MyType 
{ 
    public int TypeOne { get; set; } 
    public int TypeTwo { get; set; } 
} 

... 

var myType = new MyType { TypeOne = 5, TypeTwo = 3 }; 

hoặc các biến thể trên chủ đề đó.

+1

Cung cấp một giải pháp thay thế làm cho câu trả lời này trở thành một câu trả lời tuyệt vời. – Myster

Các vấn đề liên quan