Mientras buscaba la diferencia entre Count y Count () , pensé en mirar el código fuente de Count()
. Vi el siguiente fragmento de código en el que me pregunto por qué la checked
palabra clave es necesaria / necesaria:
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num = checked(num + 1);
}
return num;
}
El código fuente:
// System.Linq.Enumerable
using System.Collections;
using System.Collections.Generic;
public static int Count<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
}
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null)
{
return collection.Count;
}
IIListProvider<TSource> iIListProvider = source as IIListProvider<TSource>;
if (iIListProvider != null)
{
return iIListProvider.GetCount(onlyIfCheap: false);
}
ICollection collection2 = source as ICollection;
if (collection2 != null)
{
return collection2.Count;
}
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num = checked(num + 1);
}
return num;
}
}
Respuestas:
Debido a que no quiere devolver un número negativo en el evento (ciertamente improbable) de que haya más de 2 mil millones de elementos impares en la secuencia, o un número no negativo pero simplemente incorrecto en el caso (aún más improbable) que hay más de 4 mil millones de artículos impares en la secuencia.
checked
detectará la condición de desbordamiento.fuente
unchecked
; sin embargo, se puede cambiar achecked
nivel global a través de un conmutador de compilación, pero, francamente, rara vez veo que se usa, por lo que creo que es muy incorrecto sugerir que C # se ejecuta "normalmente" enchecked
modo; tenga en cuenta también queunsafe
no tiene interacción conunchecked