2008-09-17 30 views
7

Lợi nhuận sauShorthand nếu loại nullable + (C#)

Loại biểu thức điều kiện không xác định được vì không có chuyển đổi ngầm giữa 'đúp' và '< rỗng >'

aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null) 

Lý do tại sao tôi không thể chỉ sử dụng aNullableBool thay vì vòng lặp với aDouble là vì aNullableDouble là thuộc tính của một Ent được tạo Lớp ityFramework không thể được sử dụng như một mệnh đề.

Trả lời

9
aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null; 
1
aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null) 
+0

new Nullabled() ?! Đó không phải là những gì đôi? cú pháp là dành cho ?! – ljs

+0

Vâng, điều đó cũng sẽ hoạt động. Tôi rõ ràng hơn, nhưng cả hai hình thức sẽ tạo ra mã giống hệt nhau. –

7

Chỉ cần thổi cú pháp ra vào cú pháp đầy đủ thay vì viết tắt ... nó sẽ được dễ dàng hơn để đọc:

aNullableDouble = null; 
if (double.TryParse(aString, out aDouble)) 
{ 
    aNullableDouble = aDouble; 
} 
+0

Đẹp. Điều đó làm tăng thêm sự rõ ràng. – ljs

0

NET hỗ trợ nullable types, nhưng bằng cách tuyên bố họ như vậy bạn phải đối xử với họ một chút khác nhau (như, dễ hiểu, một cái gì đó mà thường là một loại giá trị bây giờ là loại tham chiếu-ish). Điều này cũng có thể không giúp ích nhiều nếu bạn phải thực hiện quá nhiều chuyển đổi giữa các cặp đôi có thể vô hiệu hóa và gấp đôi thông thường ... có thể dễ dàng là trường hợp với một nhóm các lớp được tạo tự động.

1

Tác dụng phụ thú vị của việc sử dụng các loại nullable là bạn không thể thực sự sử dụng viết tắt IF. Viết tắt IF phải trả về cùng một Loại từ cả hai điều kiện và không thể rỗng trong cả hai trường hợp. Vì vậy, bỏ hoặc viết nó ra :)

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