Khi tôi đang tìm sự khác biệt giữa Count và Count () , tôi nghĩ lướt qua mã nguồn của Count()
. Tôi thấy đoạn mã sau đây trong đó tôi tự hỏi tại sao checked
từ khóa là cần thiết / cần thiết:
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num = checked(num + 1);
}
return num;
}
Mã nguồn:
// 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;
}
}
2
.NET 4.0 chưa có kiểm tra này, 4.5 đã làm. Làm cho nó phần nào có khả năng rằng điều này đã được thực hiện để tránh rắc rối với các trình lặp WinRT , lưu ý rằng chúng sử dụng uint.
—
Hans Passant