看到在C#中double.Nan == double.NaN
總是錯誤的,我很好奇平等是如何實現的。所以我用ReSharper的反編譯的雙重結構,這裏是我發現:什麼時候是一個System.Double不是雙?
public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
// stuff removed...
public const double NaN = double.NaN;
// more stuff removed...
}
這似乎預示着該結構Double
聲明是在這個特殊的小寫double
形式定義的常量,但我」 d總是認爲這兩者完全是同義詞。更重要的是,如果我使用小寫雙精度實現,Resharper只需將我滾動到文件頂部的聲明即可。同樣,跳轉到執行小寫的NaN
只需要我在行中的前一個常量聲明!
所以我想了解這個看似遞歸的定義。這只是反編譯器的人造物嗎?也許Resharper的限制?或者,這個小寫字母雙重實際上是一個完全不同的野獸 - 代表CLR/CTS的更低層次的東西?
NaN
究竟是從哪裏來的?
這與此相關嗎? http://stackoverflow.com/questions/4751885/how-are-the-primitive-types-defined-non-recursively而且還http://stackoverflow.com/questions/16113850/if-int32-is-just-an -alias-for-int-how-can-the-int32-class-use-an-int –
只用VS查看元數據顯示'public const double NaN = 0.0/0.0;' –
'NaN'表示'不是數字「,並且可以是正數或負數,就像」無限「一樣。如果有人想知道。 – Nolonar