2011-12-05 43 views
6

Khi tôi thực hiện như sau tôi nhận được:không thể chuyển đổi hoàn toàn kiểu System.DateTime? để System.DateTime

inv.RSV = pid.RSVDate 

tôi nhận được như sau: không thể mặc nhiên chuyển đổi loại System.DateTime? vào System.DateTime.

Trong trường hợp này, inv.RSV là DateTime và pid.RSVDate là DateTime?

Tôi đã thử các sau đây nhưng đã không thành công:

if (pid.RSVDate != null) 
{     

    inv.RSV = pid.RSVDate != null ? pid.RSVDate : (DateTime?)null; 
} 

Nếu pid.RSVDate là null, tôi thích không gán inv.RSV bất cứ điều gì trong trường hợp này nó sẽ là null.

Trả lời

15

Ngày giờ không được rỗng. Mặc định là DateTime.MinValue.

Những gì bạn muốn làm là như sau:

if (pid.RSVDate.HasValue) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 

Hoặc, một cách ngắn gọn hơn:

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

inv.RSV không bắt đầu bằng. Làm thế nào để tôi nói không cập nhật nó không có giá trị cho pid.RSVDate –

+0

@NatePet bạn kiểm tra 'pid.RSVDate.HasValue'. Nếu nó không có giá trị được gán thì 'HasValue' sẽ trả về' false', trong trường hợp này bạn không cập nhật giá trị khác của bạn. Dựa trên thông báo lỗi của bạn, 'inv.RSV' là' DateTime', không thể có giá trị null. Nếu bạn muốn gán null cho nó, hãy thay đổi kiểu của nó thành 'DateTime?' Thành nullable. –

+0

@NatePet, "inv.RSV không có giá trị để bắt đầu bằng": bạn có chắc chắn về điều đó không? Ngày giờ ** không được rỗng ** –

8

Bạn cần phải thực hiện các nullable RSV sở hữu quá, hoặc chọn một giá trị mặc định cho các trường hợp trong đó RSVDate là null.

inv.RSV = pid.RSVDate ?? DateTime.MinValue; 
+0

+1 cho sự kết hợp rỗng –

1

nếu một trong những được gán vào như một DateTime và một đang được giao từ là DateTime?, bạn có thể sử dụng

int.RSV = pid.RSVDate.GetValueOrDefault(); 

này hỗ trợ một tình trạng quá tải cho phép bạn chỉ định các giá trị mặc định, nếu mặc định cho DateTime không phải là lý tưởng.

Nếu pid.RSVDate là null, tôi không muốn chỉ định inv.RSV bất kỳ nội dung nào trong đó trường hợp nó sẽ là rỗng.

int.RSV sẽ không được rỗng, như bạn đã nói là DateTime, không phải loại rỗng. Nếu nó không bao giờ được chỉ định bởi bạn, nó sẽ có giá trị mặc định của loại đó, là DateTime.MinValue hoặc ngày 1 tháng 1, 0001.

inv.RSV là null để bắt đầu. Làm thế nào để nói không cập nhật nó không có giá trị cho pid.RSVDate

Một lần nữa, điều này chỉ đơn giản là không thể, được đưa ra mô tả của bạn của bất động sản. Tuy nhiên, nếu nói chung bạn không muốn cập nhật inv.RSV nếu pid.RSVDate là không (và bạn chỉ bị lẫn lộn trong lời nói của bạn), thì bạn chỉ cần viết một kiểm tra if xung quanh bài tập.

if (pid.RSVDate != null) 
{ 
    inv.RSV = pid.RSVDate.Value; 
} 
2

Vì inv.RSV không phải là trường rỗng, không thể là NULL. Khi bạn khởi tạo đối tượng của bạn, nó là một inv mặc định.RSV một DateTime trống rỗng, giống như bạn sẽ nhận được nếu bạn nói

inv.RSV = new DateTime() 

Vì vậy, nếu bạn muốn thiết lập inv.RSV để pid.RSV nếu nó không phải là NULL, hoặc giá trị DateTime mặc định là nó là null , làm điều này:

inv.RSV = pid.RSVDate.GetValueOrDefault() 
0

pid.RSVDate có khả năng trở null, trong khi inv.RSV không, vì vậy những gì sẽ xảy ra nếu RSVDatenull?

Bạn cần phải kiểm tra nếu giá trị là null trước -

if(pid.RSVDate.HasValue) 
    inv.RSV = pid.RSVDate.Value; 

Nhưng điều gì sẽ giá trị của inv.RSV được nếu RSVDate là null? Có luôn luôn sẽ là một ngày trong tài sản này? Nếu có, bạn có thể sử dụng toán tử ?? để gán mặc định nếu muốn.

pid.RSV = pid.RSVDate ?? myDefaultDateTime; 
Các vấn đề liên quan