在反映ILSpy的同时,我在Queue<T>.Enqueue(T item)-method中找到了这行代码:
if (this._size == this._array.Length)
{
int num = (int)((long)this._array.Length * 200L / 100L);
if (num < this._array.Length + 4)
{
num = this._array.Length + 4;
}
this.SetCapacity(num);
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道为什么有人会这样做?我认为这是一种整数溢出检查,但为什么先乘以200L然后除以100L?
这可能是早期编译器的问题吗?
通常先乘以然后除以 100 的东西是百分比计算 - 也许const XxxPercentage = 200原始代码中有一些类似的东西。编译器似乎没有优化* 200 / 100to * 2。
此代码将容量设置为其大小的两倍 - 但如果其大小的两倍小于原始大小 + 4,请改用它。
它被转换为 long 的原因可能是因为如果将整数乘以“200%”,它会溢出。
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |