La intención de * 200L/100L
no es más clara que * 2
en mi opinión. La única razón por la que puedo pensar por qué se hace así es para asegurarme de que la longitud de la cola puede crecer hasta 200 veces. Hay una diferencia en * 200/100
y * 2
, de modo que la primera dará como resultado una excepción de desbordamiento para un número 100 veces menor. Por ejemplo si era para valores de bytes, x * 200/100
fallarían para x == 2, pero * 2
fallarían sólo si x era tan grande como 128.
Pero como Marcelo Cantos señaló (long)this._array.Length * 200L/100L
nunca se desbordará por lo que mi respuesta no es probable ayudando mucho.
¿Puede ser una 'característica' de ILSpy? Tal vez en el código fuente es solo * 2
.
EDITAR
Después de una investigación adicional Parece que este código extraño debe ser un artefacto de alguna refactorización. He comprobado cómo se hace en la Lista <>
private void EnsureCapacity(int min)
{
if (this._items.Length < min)
{
int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
if (num < min)
{
num = min;
}
this.Capacity = num;
}
}
Es tan sencillo como era de esperar. Mi suposición es que el código Queue.Enqueue
se modificó pero no se limpió por completo y se produjo un código extraño como resultado de este cambio.La mayoría de los desarrolladores asumen que las bibliotecas de Microsoft son perfectas y todo tiene un significado, pero es probable que no todas las líneas de código estén escritas por un genio :-)
¿Para qué se utiliza el número? – UrbanEsc
@UrbanEsc Se utiliza para cambiar el tamaño de la matriz –
No se puede relacionar con el desbordamiento, ya que '(largo) _array.Length * 200' nunca se desbordará. El elemento '+ 4' es para asegurar que la matriz aún crezca incluso si su tamaño original es cero. –