Tôi không muốn đúc null
giá trị (có vẻ lạ với tôi):
long? variable1 = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
Một lựa chọn:
long? variable1 = reader.IsDBNull(2) ? default(long?) : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? (long?)null : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new Nullable<long>() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new long?() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? null : new long?(reader.GetInt64(2));
Nó chỉ là vấn đề của hương vị. Tôi nghĩ tùy chọn đầu tiên dễ đọc hơn những người khác.
UPDATE: Xem xét cũng viết một số phương pháp khuyến nông để làm cho mã của bạn rõ ràng hơn:
public static class DataReaderExtensions
{
public static long? GetNullableInt64(this IDataReader reader, int index)
{
if (reader.IsDBNull(index))
return null;
return reader.GetInt64(index);
}
}
Trong trường hợp này bạn không sử dụng nhà điều hành ternary (không đúc để nullable), và đọc giá trị từ độc giả trông khá:
long? variable1 = reader.GetNullableInt64(2);
Nguồn
2012-05-17 10:29:18
Vâng diễn viên dành cho toán tử điều kiện bạn sử dụng, nó cần kiểu trả về của các nhánh tương tự và snippet2 là lỗi trình biên dịch bạn cần nó là 'dài? variable1' – V4Vendetta
Như V4Vendetta đã nói, trong đoạn thứ hai, các loại lh và rh của bạn khác nhau. –
Trong đoạn 1, 'biến1' chỉ tồn tại bên trong phạm vi' if'. – comecme