gpt4 book ai didi

types - Decimal.MinValue & Decimal.MaxValue : why static readonly and not const modifiers?

转载 作者:行者123 更新时间:2023-12-04 12:41:20 27 4
gpt4 key购买 nike

在 C# 中,最小值 字段是为数字类型定义的:

静态只读 十进制类型的修饰符 (Link to MSDN Libray for .NET 4.5) :

public static readonly decimal MinValue

const 所有其他数字类型的修饰符:
//Integral signed numeric types
public const sbyte MinValue
public const short MinValue
public const int MinValue
public const long MinValue

//Integral unsigned numeric types
public const byte MinValue
public const ushort MinValue
public const uint MinValue
public const ulong MinValue

//Real numeric types
public const float MinValue
public const double MinValue

为什么 const 修饰符不用于定义 Decimal.MinValue 字段?

评论:

① 同样的问题适用于数字类型 最大值 field 。

② VB、C++ 和 F# 对十进制类型也使用不同的修饰符,所以这个问题不是特定于 C# 语言的。

最佳答案

这是个有趣的问题。我做了一些研究,以及关于 Decimal 的 MS 文档。最小/最大字段明确表示(注意两者的措辞相同;为了清楚起见,在括号中显示):

The value of this constant is [negative] 79,228,162,514,264,337,593,543,950,335.



以下代码编译没有问题:
public const decimal MaxValue = 79228162514264337593543950335M;

- 编辑 -

注意:这里是 .NET 4.5(从 MS 下载的 PDB 源)源中的字段分配,此代码调用的十进制构造函数。请注意,它声明了一个 const 值。看来,至少对于 4.5,文档是错误的。 (这不是第一次 MS 文档不正确)。正如@Daniel 在评论中指出的那样,源代码似乎也无法编译。
public const Decimal MinValue = new Decimal(-1, -1, -1, true, (byte) 0);
public const Decimal MaxValue = new Decimal(-1, -1, -1, false, (byte) 0);

public Decimal(int lo, int mid, int hi, bool isNegative, byte scale)
{
if ((int) scale > 28)
throw new ArgumentOutOfRangeException("scale", Environment.GetResourceString("ArgumentOutOfRange_DecimalScale"));
this.lo = lo;
this.mid = mid;
this.hi = hi;
this.flags = (int) scale << 16;
if (!isNegative)
return;
this.flags |= int.MinValue;
}

另请注意:在 2.0 框架中,十进制是直接声明的:
public const Decimal MaxValue = 79228162514264337593543950335m;
因此,不一致和不正确的文档是我得出的结论。我将留给其他人查看模式的其他框架版本。

关于types - Decimal.MinValue & Decimal.MaxValue : why static readonly and not const modifiers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501369/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com