2010-01-15 28 views
6

Tôi chỉ chạy trên một số mã trong khi làm việc với System.DirectoryServices.AccountManagementTrong C#, các `là gì? 'Trong các loại' DateTime? '

public DateTime? LastLogon { get; } 

là gì? sau DateTime cho.

Tôi đã tìm thấy một tham chiếu cho ?? Operator (C# Reference), nhưng nó không giống nhau. (280Z28: Đây là liên kết chính xác cho Using Nullable Types.)

+1

Liên kết trong bài đăng của bạn thực sự là ?? toán tử, đó là toán tử kết hợp không liên quan nhưng rất mát mẻ. –

+2

Đọc phần 4.1.10 của đặc điểm kỹ thuật C# để biết chi tiết. –

+0

@Charlie: Tôi nghĩ rằng đó là một bản sao trong quần áo của cừu cho đến khi tôi viết lại nó trong tiêu đề. –

Trả lời

27

Làm cho nó là loại không thể sử dụng (viết tắt là Nullable<T> Cấu trúc và áp dụng cho tất cả các loại giá trị).

Nullable Types (C#)

Lưu ý:

Các ?? bạn liên kết với các nhà điều hành là coalescing rỗng đó là hoàn toàn khác nhau.

+4

Tôi nghĩ rằng một trong những điều quan trọng nhất để chỉ ra ở đây là điều này không phải là đặc biệt đối với loại DateTime. Nó hoạt động cho các kiểu int, decimal và các kiểu khác không phải null cũng như trong cùng một cách. –

4

? không phải là toán tử trong trường hợp này, là một phần của loại đó. Cú pháp

DateTime? 

là viết tắt của

Nullable<DateTime> 

để nó tuyên bố rằng LastLogon là một tài sản đó sẽ trả về một Nullable<DateTime>. Để biết chi tiết, hãy xem MSDN.

?? mà bạn linked có phần hơi liên quan ở đây. Đó là toán tử null-coalescing có các ngữ nghĩa sau đây. Khái niệm

x ?? y 

đánh giá để y nếu xnull nếu không nó đánh giá để x. Ở đây x có thể là một kiểu tham chiếu hoặc một kiểu nullable.

0

Đó là một phím tắt cho Nullable<DateTime>. Hãy nhận biết rằng các phương pháp sử dụng các loại này không thể được tiếp xúc với COM khi chúng được sử dụng Generics mặc dù trông giống như họ không.

0

Khi người khác đã đề cập đến điều này? cú pháp làm cho kiểu nullable.

Một vài điều quan trọng cần lưu ý khi làm việc với các loại nullable (lấy từ the docs, nhưng tôi nghĩ rằng nó sẽ là hữu ích để gọi chúng ra đây):

  • Bạn thường sử dụng chỉ đọc các thuộc tính ValueHasValue khi làm việc với các loại có thể null.

ví dụ:

int? num = null; 
if (num.HasValue == true) 
{ 
    System.Console.WriteLine("num = " + num.Value); 
} 
  • Bạn có thể sử dụng toán tử coalescing null để gán một giá trị mặc định cho một loại nullable. Điều này rất tiện dụng.

ví dụ:

int? x = null; 
int y = x ?? -1; 
0

Như những người khác đã đề cập, ? được sử dụng cho declaring a value type as nullable.

này là rất tốt trong một vài tình huống:

  • Khi kéo dữ liệu từ một cơ sở dữ liệu mà có một giá trị null được lưu trữ trong một lĩnh vực nullable (mà các bản đồ cho một loại giá trị NET)
  • Khi bạn cần đại diện cho "không được chỉ định" hoặc "không tìm thấy".

Ví dụ, hãy xem xét một lớp học sử dụng để đại diện cho thông tin phản hồi từ khách hàng được hỏi một loạt các câu hỏi không bắt buộc:

class CustomerFeedback 
{ 
    string Name { get; set; } 
    int? Age { get; set; } 
    bool? DrinksRegularly { get; set; } 
} 

Việc sử dụng các loại nullable cho AgeDrinksRegularly có thể được sử dụng để cho biết khách hàng không trả lời những câu hỏi này.

Trong ví dụ bạn trích dẫn, tôi sẽ có giá trị null cho LastLogon để có nghĩa là người dùng chưa bao giờ đăng nhập.

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