2012-02-16 42 views
10
đang

Ví dụ:Enum giá trị 0 mâu thuẫn

public enum Foods 
    { 
     Burger, 
     Pizza, 
     Cake 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Eat(0); // A 
     Eat((Foods)0); // B 
     //Eat(1); // C : won't compile : cannot convert from 'int' to 'Foods' 
     Eat((Foods)1); // D  
    } 

    private void Eat(Foods food) 
    { 
     MessageBox.Show("eating : " + food); 
    } 

Mã tại dòng C sẽ không biên dịch, nhưng dòng Một biên dịch tốt. Có điều gì đặc biệt về một enum với 0 giá trị mà nó được điều trị đặc biệt trong các trường hợp như thế này?

Trả lời

14

Có, chữ số 0 là chuyển đổi hoàn toàn thành bất kỳ loại enum nào và biểu thị giá trị mặc định cho loại đó. Theo đặc điểm kỹ thuật ngôn ngữ C#, cụ thể trong phần 1.10 trên enums:

Giá trị mặc định của bất kỳ loại enum nào là giá trị tích phân bằng không được chuyển thành loại enum. Trong trường hợp các biến được tự động khởi tạo thành một giá trị mặc định, đây là giá trị được gán cho các biến của kiểu enum. Để cho giá trị mặc định của một kiểu enum có thể dễ dàng có sẵn, chữ 0 ẩn hoàn toàn chuyển thành bất kỳ kiểu enum nào. Đối với giá trị mặc định của một kiểu enum để có thể dễ dàng có sẵn, chữ 0 ẩn hoàn toàn chuyển thành bất kỳ loại enum nào.

+0

Có. Ở đây "0" có nghĩa là mặc định. "1" có nghĩa là gì? –

+0

@David: Không có gì. 'Thực phẩm thực phẩm = 1;' sẽ không biên dịch. Tuy nhiên, bạn có thể * cast * bất kỳ chữ nào thành enum, vì vậy 'Foods food = (Foods) 1;' là tốt. –

+0

Anthony đúng. Lý do bạn hoàn toàn có thể chuyển đổi chữ số 0 thành bất kỳ kiểu enum nào là các nhà thiết kế ngôn ngữ đã xác định nó là một tính năng hữu ích và đã viết nó vào đặc điểm kỹ thuật. – phoog

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