Quando é um System.Double não um duplo?
Depois de ver comodouble.Nan == double.NaN
é sempre falso em c #, fiquei curioso como a igualdade foi implementada sob o capô. Então eu usei o Resharper para descompilar a estrutura Double, e aqui está o que eu encontrei:
public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
// stuff removed...
public const double NaN = double.NaN;
// more stuff removed...
}
Isso parece indicar a estruturaDouble
declara uma constante que é definida em termos deste caso minúsculo especialdouble
, embora eu sempre achasse que os dois eram completamente sinônimos. Além do mais, se eu vou para implementação no double em minúsculas, Resharper simplesmente me rola para a declaração na parte superior do arquivo. Da mesma forma, pular para a implementação de minúsculasNaN
só me leva para a declaração constante no início da linha!
Então, estou tentando entender essa definição aparentemente recursiva. Isso é apenas um artefato do descompilador? Talvez uma limitação em Resharper? Ou é este duplo minúsculo realmente um animal diferente - representando algo em um nível inferior do CLR / CTS?
OndeNaN
realmente vem?