2012-11-05 50 views
14

khi chúng tôi phải sử dụng nullable nhập vào C# .net? bất kỳ ai có thể vui lòng giải thích với ví dụ.Loại nullable trong C# là gì?

+4

http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx –

+0

http://www.c-sharpcorner.com/UploadFile/PashuSX/NullableTypes04282006114548AM/NullableTypes. aspx –

Trả lời

0

Loại dễ vỡ là khái niệm mới được giới thiệu trong C# 2.0 cho phép người dùng xác nhận giá trị null cho các kiểu dữ liệu nguyên thủy của ngôn ngữ C#. Quan trọng không phải ở đây là kiểu Nullable là kiểu cấu trúc.

blogpost: Nullable type -- Why we need Nullable types in programming language ?

+0

Hơi không chính xác, tôi muốn nói 'Nullable 'là loại trình bao bọc cho phép các ngữ nghĩa không có giá trị (hoặc" tùy chọn ") cho các loại giá trị. Nó không chỉ cho primatives, và gán 'null' cho một loại nullable thực sự là cú pháp đường. Một 'null'' Nullable 'không thực sự là' null' trong tham chiếu. –

+1

Vui lòng sửa ngữ pháp của bạn trên Blogspot trước khi liên kết nó với SO. Nếu không ai có thể hiểu được lời giải thích của bạn vì ngữ pháp kém, thì vấn đề là gì? – ragingasiancoder

1

từ: http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx loại Nullable là trường hợp của các struct System.Nullable. Một kiểu nullable có thể đại diện cho phạm vi giá trị bình thường cho kiểu giá trị cơ sở của nó, cộng với một giá trị null bổ sung. Ví dụ: một Nullable <Int32>, phát âm là "Nullable of Int32", có thể được chỉ định bất kỳ giá trị nào từ -2147483648 đến 2147483647 hoặc có thể gán giá trị null. Một Nullable <bool> có thể được gán các giá trị đúng hay sai, hoặc null

class NullableExample 
{ 
    static void Main() 
    { 
     int? num = null; 
     if (num.HasValue == true) 
     { 
      System.Console.WriteLine("num = " + num.Value); 
     } 
     else 
     { 
      System.Console.WriteLine("num = Null"); 
     } 

     //y is set to zero 
     int y = num.GetValueOrDefault(); 

     // num.Value throws an InvalidOperationException if num.HasValue is false 
     try 
     { 
      y = num.Value; 
     } 
     catch (System.InvalidOperationException e) 
     { 
      System.Console.WriteLine(e.Message); 
     } 
    } 
} 
29

loại Nullable (When to use nullable types) là kiểu giá trị có thể mất null như giá trị. Mặc định của nó là null có nghĩa là bạn không gán giá trị cho nó. Ví dụ về các loại giá trị là int, float, double, DateTime, vv Những loại có những giá trị mặc định

int x = 0; 
DateTime d = DateTime.MinValue; 
float y = 0; 

Đối với lựa chọn thay thế Nullable, các defualt của bất kỳ ở trên là null

int? x = null; //no value 
DateTime? d = null; //no value 

Điều này làm cho họ cư xử như kiểu tham chiếu đối tượng, chuỗi

string s = null; 
object o = null; 

Chúng rất hữu ích khi xử lý các giá trị từ cơ sở dữ liệu khi các giá trị được trả về từ bảng là NULL. Hãy tưởng tượng một giá trị số nguyên trong bảng cơ sở dữ liệu của bạn có thể là NULL, như vậy chỉ có thể được biểu diễn bằng 0 nếu biến C# không phải là nullable - số nguyên thông thường.

Ngoài ra, hãy tưởng tượng cột EndDate có giá trị không được xác định cho đến thời gian thực tế trong tương lai. Điều đó có thể được thiết lập để NULL trong DB nhưng bạn sẽ cần một loại nullable để lưu trữ rằng trong C#

DateTime StartDate = DateTime.Today; 
DateTime EndDate? = null; //we don't know yet 
2

Khi chúng ta phải sử dụng loại nullable trong C# .net?

Hãy tưởng tượng có một biến số nguyên id đại diện cho một số id cụ thể.

Bạn có thể lưu trữ 1, 44, hoặc bất cứ điều gì else.But gì xảy ra nếu bạn không biết id.You không thể chỉ lưu trữ -1 hoặc 0 .Bạn có thể nghĩ gán null nhưng thường null không thể được gán cho các kiểu giá trị .

int id=null;//error 

Nullable type cho phép bạn thực hiện việc này.


Giá trị các loại như int,double,char..không có thể được biểu diễn dưới dạng giá trị NULL.

Đại diện null trong loại giá trị mà bạn phải sử dụng nullable type ..

Nó được ký hiệu là một loại giá trị tiếp theo ?

int? id=null;

được transalted để

Nullable<int> id=new Nullable<int>();

Giá trị mặc định giá trị của nó một loại nullable là null.

0

Giả sử trong một ứng dụng mà bạn có yêu cầu chụp ngày sinh của khách hàng, đây không phải là trường bắt buộc. Bạn có thể khai báo thuộc tính DateOfBirth dưới dạng kiểu System.DateTime trong lớp Customer. Bởi vì DateTime là một kiểu giá trị, nó không thể chấp nhận các giá trị null, vì vậy nó sẽ có một số giá trị mặc định.

Vì vậy, khi khách hàng không điền giá trị rõ ràng trong điều khiển Ngày sinh, bạn sẽ cần thực hiện một số logic trước khi lưu nó trong DB để xem mặc định là NULL. Trong DB, bạn có thể lưu các trường NULL vào DateTime.

Để tránh các bước không mong muốn này để diễn giải các giá trị trong giao diện người dùng và trong lớp DA, bạn có thể sử dụng các loại có thể đọc được trong C#, điều này sẽ làm cho mã dễ đọc hơn.

Để đọc thêm thông tin về các loại không có giá trị, hãy tham khảo Nullable types in C# with an example.