2012-03-07 20 views
12

Làm cách nào để tạo một lớp nullable (?) Trong C#? Giống như:Tạo lớp nullable

public class Hello1 { 
    public int Property1 { get; set; } 
} 

public class Hello2 { 
Public Hello1? Property2 { get; set; } //Hello1 should work when it has "?" 
} 

Tôi muốn làm cho lớp Hello1 có dạng "Hello1?" Nếu cần thiết.

+1

Đây là bản sao của http://stackoverflow.com/questions/3132667/nullable-class – evasilchenko

Trả lời

31

Bạn không cần phải tạo loại có thể vô hiệu cho các loại tham chiếu. Họ đã vô hiệu. Bạn chỉ cần thực hiện việc này cho các loại Giá trị như int, bool, decimal, etc ...

+0

Ok Tôi đã nhầm lẫn KeyValuePair với một lớp học. Đó là một cấu trúc nên nó yêu cầu "?". Tôi đã cố tạo ra một thứ tương tự. Nó có ý nghĩa. – iefpw

8

Bạn không cần phải; các loại tham chiếu có thể là null. Đối với cấu trúc, chỉ cần thêm ?sẽ hoạt động. Vì vậy, chỉ cần xóa ? và kiểm tra null bằng cách sử dụng == null, như thường lệ.

0

Hello1 không thể sử dụng được. Bạn không cần số ? trên thuộc tính của mình.

Chỉnh sửa - Tôi nghi ngờ bạn có thể đang cố gắng đặt Hello1.Property1 thành không và bạn hy vọng rằng việc thực hiện Hello1 có thể vô hiệu sẽ cho phép điều đó. Nó sẽ không. Bạn cần đánh dấu Property1 là không thể thực hiện được nếu bạn đang thực hiện điều đó.

1

Tất cả các lớp đều không thể thực hiện được. nullable là cho các loại Giá trị không được rỗng

0

Hello1 đã là loại tham chiếu, do đó, nó có thể là null rồi.
Cú pháp vô hiệu "classname?" chỉ có thể được áp dụng cho ValueTypes, chẳng hạn như int, DateTime, float v.v., không thể là null thường.

2

Chỉ cần xóa dấu chấm hỏi. Tất cả các lớp đều có giá trị mặc định. Chỉ các đối tượng kiểu giá trị (như struct) cần được tạo ra một cách rõ ràng nullable.