Cách bạn đang làm việc đó là tốt:
PostType[] q = new PostType[qArray.Length];
for (int i = 0; i < q.Length; i++)
q[i] = new PostType();
Một điều tôi đã thay đổi là đổi tên chỉ số veriable từ x đến tôi, như tôi đã tìm thấy điều này dễ dàng hơn để đọc, mặc dù đó là một điều chủ quan.
Điều khác mà tôi đã thay đổi là điều kiện kết thúc vòng lặp phải phụ thuộc vào độ dài của q, không phải trên chiều dài của qArray. Lý do cho điều này là với phương thức của bạn nếu bạn quyết định thay đổi dòng đầu tiên để sử dụng độ dài khác thay vì qArray.Length, bạn cũng phải nhớ thay đổi dòng thứ hai. Với mã đã sửa đổi, bạn chỉ cần cập nhật dòng mã đầu tiên và phần còn lại sẽ hoạt động mà không cần sửa đổi.
Bạn cũng có thể làm điều này bằng LINQ:
PostType[] q = Enumerable.Range(0, qArray.Length)
.Select(_ => new PostType())
.ToArray();
Nhưng đối với mảng lớn này sẽ chậm hơn và không thực sự dễ dàng hơn để đọc theo ý kiến của tôi (đặc biệt là nếu bạn không nhìn thấy nó trước đó). Tôi nghĩ tôi có lẽ chỉ cần gắn bó với phương pháp đầu tiên nếu tôi là bạn.
Nguồn
2010-01-09 23:42:39
Lặp lại Enumerable sẽ không làm việc vì nó lặp đi lặp lại một tham chiếu đến đối tượng đầu tiên thay vì tạo ra những cái mới – Aly
Enumerable.Range làm việc (nó tạo ra một đối tượng mới cho mỗi cuộc gọi). Nhưng tôi khuyên bạn nên chống lại hoặc lặp lại hoặc phạm vi - cả hai cho khả năng đọc và hiệu suất. Tôi đã cập nhật nhận xét của mình với một ví dụ rõ ràng và giải thích lý do tại sao tôi nghĩ bạn không nên sử dụng nó. –