C#でdouble.Nan == double.NaN
が常にfalseであることを確認した後、私は平等がどのように実装されたのかが不思議になりました。だから私はダブル構造体を逆コンパイルする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はいつも2つが完全に同義であると考えました。さらに、私が小文字の二重に実装すると、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 -All32-int-int-how-can-the-int32-class-use-an-int –
メタデータを表示するのにVSを使用するだけで、 'public const double NaN = 0.0/0.0;' –
'NaN'は' Not a 「無限大」と同様に、正または負にすることができます。誰かが不思議に思っている場合に備えて。 – Nolonar