在 .NET 4 beta 2 中,新的 Numerics 命名空间带有 struct BigInteger
. 正如我所料,文档指出它是一种不可变类型。
但是我对后增量运算符 ( ++
) 有点困惑。这肯定会改变价值。以下 while 循环有效:
static BigInteger Factorial(BigInteger n)
{
BigInteger result = BigInteger.One;
BigInteger b = BigInteger.One;
while (b <= n)
{
result = result * b;
b++; // immutable ?
}
return result;
}
这就是 MSDN 关于增量运算符的说法:
因为 BigInteger 对象是不可变的,所以 Increment 运算符创建一个新的 BigInteger 对象,其值比由 value 表示的 BigInteger 对象大一。因此,重复调用 Increment 可能会很昂贵。
一切都很好,如果我不得不使用,我会理解的, b = b++
但显然++
它本身就足以改变一个值。
有什么想法吗?