Tôi đang nhìn vào việc thực hiện Roslyn ObjectPool (https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/SharedCollections/ObjectPool%601.cs) và tôi không hiểu tại sao họ không đơn giản chọn để có một mảng T mà thay vào đó bọc T bên trong một cấu trúc?Roslyn ObjectPool struct wrapper
[DebuggerDisplay("{Value,nq}")]
private struct Element
{
internal T Value;
}
...
private readonly Element[] _items;
Mục đích của việc này là gì?
Nhưng 'ObjectPool' trên đó không đặt bất kỳ phần tử nào vào mảng. Nó dựa trên thực tế là mảng của struct được khởi tạo với các cá thể struct zeroed. –
Vâng, * cái gì đó * sẽ đặt 'Giá trị'. Điểm gì nếu không có gì bao giờ đặt giá trị đó ?! Mã đó không được hiển thị ở đây. – usr
Có một số mã đặt trường 'Giá trị'. Nhưng không có gì ghi đè lên phần tử trong một mảng. Cho rằng 'Giá trị' là một trường, Không có kiểu kiểm tra nào trong thời gian chạy. nó làm mất hiệu lực câu trả lời của bạn. Phải không? –