2010-04-21 37 views
6

tôi có mã như thế này:C# - rỗng vs "Không thể đánh giá khái niệm"

private Box mCurBox; 

    public Box CurBox 
    { 
     get { return mCurBox; } 
     set 
     { 
      if (mCurBox != value) 
      { 
       mCurBox = value; 
      } 
     } 
    } 

Khi mCurBox là null thì CurBox trình gỡ lỗi nói "có thể không được đánh giá". Nếu nó biết rằng giá trị bên dưới là null thì làm thế nào đến nó không thể tìm ra nó?

Trả lời

7

Đó là vì bạn chưa xác định mCurBox là bất kỳ thứ gì theo mặc định, do đó trình biên dịch sẽ gắn cờ hành vi này là không xác định.
Bạn cần khởi tạo mCurBox dưới dạng null, hoặc trong cùng một dòng mà bạn xác định nó hoặc trong một hàm tạo.
Nói chung, thực hành tốt là khuyến khích các loại tham chiếu thành vô giá trị nếu bạn không gán thứ gì đó cho chúng khi xác định chúng.
Ngoài ra, khi bạn chỉ đang chỉ định và truy xuất, bạn có thể dễ dàng sử dụng các thuộc tính tự động.

+0

Tôi nghi ngờ về tuyên bố "thực hành tốt để khuyến khích các loại tham chiếu thành null"; Khung công tác sẽ chỉ định các giá trị này cho mặc định của chúng. –

2

Trình gỡ lỗi có thể trở nên gimpy ngay bây giờ và sau đó. Nhưng trường hợp dự kiến ​​nhận được "Không thể đánh giá" là bản dựng. Các thuộc tính đơn giản như thế này được tối ưu hóa bởi trình biên dịch JIT. Mã getter thuộc tính sẽ không có mặt.

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