Thứ Sáu, 27 tháng 7, 2012

Dấu hỏi ? ngay sau kiểu dữ liệu có ý nghĩa gì trong C#

Đối với các kiểu dữ liệu không có giá trị null.
Ví dụ kiểu bool thì chỉ có 2 giá trị là true và false, kiểu int thì là những con số, ...
Khi bạn khai báo như sau sẽ bị báo lỗi:
  1. int a = null;  
  2. bool b = null;  
Hoặc:
  1. public int GetNull()  
  2. {  
  3.     return null;  
  4. }  
Hoặc khai báo hàm như sau:
  1. public static void XuLy(int a, int b)  
  2. { }  
Nhưng lúc truyền biến vào hàm là giá trị null:
  1. XuLy(1, null);  
Sử dụng dấu hỏi ? ngay sau kiểu dữ liệu ta được 1 kiểu dữ liệu mới. Miền giá trị bao gồm miền giá trị của kiểu dữ liệu cũ và thêm giá trị null nữa.
Khai báo như sau sẽ không còn báo lỗi nữa:
  1. int? a = null;  
  2. bool? b = null;  
  1. public int? GetNull()  
  2. {  
  3.     return null;  
  4. }  
  1. public static void XuLy(int a, int? b)  
  2. { }  
Note:
 - Chỉ có thể gán kiểu dữ liệu not null cho kiểu dữ liệu có thể null chứ ngược lại thì không.
 - Ví dụ có thể gán:
  1. int a = 5;  
  2. int? b = a;  
Chứ không thể gán:
  1. int? a = 5;  
  2. int b = a;  
Hoặc không thể:
  1. public int Test()  
  2. {  
  3.     return GetNull();  
  4. }  
  5. public int? GetNull()  
  6. {  
  7.     return null;  
  8. }  

2 nhận xét :