Sau khi xem cách double.Nan == double.NaN
luôn luôn là sai trong C#, tôi đã trở nên tò mò như thế nào bình đẳng đã được thực hiện dưới mui xe. Vì vậy, tôi sử dụng Resharper để biên soạn lại các cấu trúc đôi, và đây là những gì tôi thấy:Khi nào là System.Double không phải là gấp đôi?
public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
// stuff removed...
public const double NaN = double.NaN;
// more stuff removed...
}
Điều này dường như chỉ ra các struct Double
tuyên bố một hằng số được định nghĩa về trường hợp này thấp hơn đặc biệt double
, mặc dù tôi d luôn nghĩ rằng hai người hoàn toàn đồng nghĩa. Hơn nữa, nếu tôi đi đến thực hiện trên đôi chữ thường, Resharper chỉ đơn giản là cuộn tôi đến khai báo ở trên cùng của tập tin. Tương tự như vậy, nhảy để thực hiện các chữ thường của NaN
chỉ đưa tôi đến khai báo liên tục trước đó trong dòng!
Vì vậy, tôi đang cố gắng hiểu định nghĩa dường như đệ quy này. Đây có phải chỉ là một vật phẩm của bộ giải mã? Có lẽ một hạn chế trong Resharper? Hoặc là chữ thường đôi này thực sự là một con thú khác hoàn toàn - đại diện cho một cái gì đó ở một mức độ thấp hơn từ CLR/CTS?
Trường hợp nào NaN
thực sự đến từ đâu?
Đây có phải là liên quan không? http://stackoverflow.com/questions/4751885/how-are-the-primitive-types-defined-non-recursively Và cũng http://stackoverflow.com/questions/16113850/if-int32-is-just-an -alias-for-int-how-can-the-int32-class-use-an-int –
Chỉ cần sử dụng VS để xem siêu dữ liệu cho thấy 'public const double NaN = 0.0/0.0;' –
'NaN' có nghĩa là 'Không phải là Số' và có thể là số dương hoặc âm, giống như 'Infinity'. Trong trường hợp ai đó đang tự hỏi. – Nolonar