Tất cả kích thước ban đầu là provide a hint to the implementation to have at least a given capacity. Nó không tạo ra một danh sách chứa đầy các mục nhập mặc định là N
; tôi nhấn mạnh:
Initializes a new instance of the List<T>
class that is empty and has the specified initial capacity.
Nếu bạn tiếp tục thông qua các mục nhập MSDN vào phần chú thích, bạn sẽ tìm thấy lý do tại sao tình trạng quá tải constructor này được cung cấp (một lần nữa, tôi nhấn mạnh):
The capacity of a List<T>
is the number of elements that the List<T>
can hold. As elements are added to a List<T>
, the capacity is automatically increased as required by reallocating the internal array.
If the size of the collection can be estimated, specifying the initial capacity eliminates the need to perform a number of resizing operations while adding elements to the List<T>
.
Nói tóm lại là List<T>.Count
không giống như List<T>.Capacity
("Nếu Count vượt quá Dung lượng khi thêm yếu tố, dung lượng được tăng lên ...").
Bạn nhận được ngoại lệ bởi vì danh sách chỉ logic chứa các mục mà bạn thêm, thay đổi công suất không thay đổi số lượng các mục logic lưu trữ. Nếu bạn đã thiết lập List<T>.Capacity
đến dưới List<T>.Count
chúng ta có thể kiểm tra hành vi này xảy ra theo một hướng khác:
Unhandled Exception: System.ArgumentOutOfRangeException: capacity was less than
the current size.
Parameter name: value
at System.Collections.Generic.List`1.set_Capacity(Int32 value)
Để có lẽ tạo ra hành vi mà bạn đang tìm kiếm:
public static List<T> CreateDefaultList<T>(int entries)
{
return new List<T>(new T[entries]);
}
Bạn không thể chèn ở vị trí thứ 2, nếu vị trí 0 và 1 chưa đầy –
Như một cách chính xác chỉ ra, khả năng không giống như kích thước . Viết Count vào giao diện điều khiển trước khi gọi Insert, danh sách có ít hơn 3 mục, vì vậy chèn giá trị mới vào vị trí thứ 3 thất bại. –