2010-12-02 36 views
132

Tôi có một enumLàm thế nào để thiết lập enum null

string name; 

public enum Color 
{ 
    Red, 
    Green, 
    Yellow 
} 

Làm thế nào để thiết lập nó để NULL trên tải.

name = ""; 
Color color = null; //error 

được sửa đổi: xấu của tôi, tôi đã không giải thích nó đúng cách. Nhưng tất cả các câu trả lời liên quan đến nullable là hoàn hảo. Tình hình của tôi là gì nếu, tôi đã có được/thiết lập cho enum trong một lớp học với các yếu tố khác như tên, vv. Trên trang tải tôi khởi tạo lớp và cố gắng để mặc định các giá trị null. Đây là kịch bản (Mã nằm trong C#):

namespace Testing 
{ 
    public enum ValidColors 
    { 
     Red, 
     Green, 
     Yellow 
    } 

    public class EnumTest 
    { 
     private string name; 
     private ValidColors myColor; 

     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public ValidColors MyColor 
     { 
      get { return myColor; } 
      set { myColor = value; } 
     } 

    } 

    public partial class _Default : System.Web.UI.Page 
    {  
     protected void Page_Load(object sender, EventArgs e) 
     { 
      EnumTest oEnumTest = new EnumTest(); 
      oEnumTest.Name = ""; 
      oEnumTest.MyColor = null; //??? 
     } 
    } 

} 

Sau đó, sử dụng các đề xuất bên dưới Tôi đã thay đổi mã trên để làm việc với các phương pháp nhận và đặt. Tôi chỉ cần thêm "?" trong lớp EnumTest trong khi khai báo biến enum riêng và trong phương thức get/set:

public class EnumTest 
{ 
    private string name; 
    private ValidColors? myColor; //added "?" here in declaration and in get/set method 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public ValidColors? MyColor 
    { 
     get { return myColor; } 
     set { myColor = value; } 
    } 

} 

Cảm ơn tất cả các đề xuất đáng yêu.

+0

có thể trùng lặp của [Enums C#: Nullable hay 'Unknown' Giá trị] (http://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or- giá trị không xác định) –

Trả lời

264

Bạn có thể sử dụng toán tử cho một kiểu nullable.

public Color? myColor = null; 

Hoặc sử dụng thực hành chuẩn cho enums không thể rỗng bằng giá trị FIRST trong enum (aka 0) là giá trị mặc định. Ví dụ trong trường hợp màu Không.

public Color myColor = Color.None; 
+58

+1 cho giá trị mặc định. –

+0

@equiman không cần phải đúc vì loại được chỉ định ở bên trái, về cơ bản bạn đang sao chép phần đầu tiên của câu trả lời của tôi đã được chấp nhận. –

+2

trả lời câu hỏi của tôi: * Bạn có thể thêm '?' để enumname để làm cho nó nullable? * – LuckyLikey

14

Biến biến của bạn thành null. Giống như: "?"

Color? color = null; 

hoặc

Nullable<Color> color = null; 
4

Một enum là một "giá trị" kiểu trong C# (có nghĩa là enum được lưu giữ như bất kỳ giá trị đó là, không phải là một tham chiếu đến một tập hợp các giá trị). Bạn không thể đặt các kiểu giá trị thành null (vì null chỉ được sử dụng cho các kiểu tham chiếu). Bạn có thể sử dụng lớp được xây dựng trong lớp Nullable<T> kết thúc tốt nhất các loại giá trị sao cho bạn có thể đặt chúng thành giá trị rỗng, kiểm tra xem nó cóvà nhận được Value thực tế của nó không. (Đó là cả hai phương pháp trên Nullable<T> đối tượng

name = ""; 
Nullable<Color> color = null; //This will work. 

Ngoài ra còn có một phím tắt, bạn có thể sử dụng:

Color? color = null; 

Đó là giống như Nullable<Color>;

31

Nếu đây là C#, nó. sẽ không hoạt động: enums là các loại giá trị và không thể là null.

Các tùy chọn thông thường là thêm thành viên None:

public enum Color 
{ 
    None, 
    Red, 
    Green, 
    Yellow 
} 

Color color = Color.None; 

... hoặc sử dụng Nullable:

Color? color = null; 
4

Tôi giả định C++ đây. Nếu bạn đang sử dụng C#, câu trả lời có thể giống nhau, nhưng cú pháp sẽ khác một chút. Enum là một tập các giá trị int. Nó không phải là một đối tượng, vì vậy bạn không nên đặt nó thành null. Thiết lập một cái gì đó để null có nghĩa là bạn đang trỏ một con trỏ đến một đối tượng để giải quyết bằng không. Bạn không thể thực sự làm điều đó với một int. Những gì bạn muốn làm với một int là để đặt nó vào một giá trị bạn sẽ không bình thường có nó ở để bạn có thể tel nếu đó là một giá trị tốt hay không. Vì vậy, thiết lập màu sắc của bạn đến -1

Color color = -1; 

Hoặc, bạn có thể bắt đầu enum của bạn tại 1 và đặt nó là zero. Nếu bạn thiết lập màu bằng 0 vì nó là ngay bây giờ, bạn sẽ thiết lập nó thành "đỏ" vì màu đỏ là 0 trong enum của bạn.

Vì vậy,

enum Color { 
red =1 
blue, 
green 
} 
//red is 1, blue is 2, green is 3 
Color mycolour = 0; 
Các vấn đề liên quan