2011-12-07 36 views
5

là gì Nếu tôi có một DateTime, và tôi làm:sự khác biệt giữa ToString() và + ""

date.Year.ToString() 

tôi nhận được năm như String. Nhưng Ngoài ra nếu tôi làm

date.Year + "" 

sự khác biệt chỉ là điều thứ hai không có ngoại lệ nếu không có Ngày? (Mà tôi prefeer)

Trả lời

4
date.Year.ToString() 

Sẽ không hoạt động nếu ngày không có giá trị.

date.Year + "" 

Làm việc ngay cả khi năm không phải là nhị phân + toán tử thay thế bằng một chuỗi rỗng.

Đây là những gì MSDN nói về nhị phân tử + concatenating hai chuỗi:

Toán tử + nhị phân thực hiện nối dây khi một hoặc cả hai toán hạng là kiểu string. Nếu toán hạng của chuỗi nối là null, một chuỗi rỗng được thay thế. Nếu không, bất kỳ đối số không phải chuỗi nào được chuyển đổi thành biểu diễn chuỗi của nó bằng cách gọi phương thức ToString ảo được thừa hưởng từ đối tượng kiểu. Nếu ToString trả về null, một chuỗi rỗng được thay thế.

Thông tin thêm về http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx

+0

'date.Year +" "' hoạt động ngay cả khi ngày là null? Có thật không? Và làm thế nào có thể một DateTime được null ở nơi đầu tiên? –

+2

Điều gì Mark đã nói, làm thế nào là nó null? Đó không phải là chỉ có thể nếu nó được tuyên bố là vô giá trị? – dbasnett

10

Khi bạn viết date.Year + "" nó sẽ được biên soạn như một lời kêu gọi string.Concat(object, object):

String.Concat(date.Year, "") 

Bên trong, phương pháp Concat sẽ gọi ToString trên từng đối tượng (không null).

Cả hai cách tiếp cận sẽ ném một số NullReferenceException nếu datenull. Nhưng bạn đã nói date là loại DateTime. DateTime là cấu trúc và do đó không thể là rỗng.


Nếu date là loại DateTime? và muốn trở về một chuỗi rỗng nếu ngày là null thì bạn có thể sử dụng này:

date.HasValue ? date.Value.Year.ToString() : "" 
+0

Uhm, tôi không nghĩ vậy! Trong trường hợp thứ hai, nếu năm là null, tôi không nhận được bất kỳ lỗi/ngoại lệ nào. Chỉ cần, nó không làm bất cứ điều gì ... – markzzz

+1

@markzzz: 'Năm' không thể là rỗng. Nó thuộc loại 'int'. –

3

Không có sự khác biệt nếu date.Year không phải là null.

Trong ví dụ thứ hai, phương thức ToString() được ngầm gọi là date.Year.

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