Vui lòng kiểm tra mã sauCông việc Nullable DateTime có chính xác không?
DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
Nó trả String.Empty
.
Có đúng không?
Có thể tốt hơn là tăng ngoại lệ trong dòng thứ hai của mã
Vui lòng kiểm tra mã sauCông việc Nullable DateTime có chính xác không?
DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
Nó trả String.Empty
.
Có đúng không?
Có thể tốt hơn là tăng ngoại lệ trong dòng thứ hai của mã
Vâng, đúng vậy. Từ các đại diện documentation
Các văn bản về giá trị của các đối tượng hiện tại
Nullable<T>
nếuHasValue
tài sản là đúng, hoặc một chuỗi rỗng (""
) nếuHasValue
sở hữu là sai.
Cũng lưu ý rằng Nullable<T>.Equals
và Nullable<T>.GetHashCode
không ném trong trường hợp này nhưng điều đó Nullable<T>.GetType
không ném. Điều này là do Object.Equals
, Object.GetHashCode
và Object.ToString
bị ghi đè cho Nullable<T>
nhưng Object.GetType
không phải là vì nó không thể vì nó không được đánh dấu là virtual
).
ok, cảm ơn bạn đã trả lời. nhưng làm thế nào bạn nghĩ là nó đúng cách? bởi vì nếu bạn sử dụng String tmp = null; tmp.ToString() nó sẽ tăng ngoại lệ –
Bởi vì một kiểu nullable với 'HasValue' là false không phải là tham chiếu' null'. Từ một quan điểm khái niệm, một kiểu nullable thể hiện một kiểu giá trị với khả năng giá trị là "mất tích". Chúng ta sử dụng 'null' để biểu diễn khi giá trị bị thiếu, nhưng điều này không giống với tham chiếu' null'. Lưu ý rằng 'tmp.Value' sẽ ném vào trường hợp' tmp' là một thể hiện của một kiểu nullable với 'HasValue' là false. Giá trị bị thiếu nên cố gắng để có được giá trị nói nên và ném cho phù hợp. – jason