Lấy một mục danh sách theo chỉ mục


321

Gần đây tôi đã bắt đầu sử dụng c # chuyển từ Java. Tôi dường như không thể tìm thấy làm thế nào để có được một mục danh sách theo chỉ mục. Trong java để có được mục đầu tiên của danh sách, nó sẽ là:

list1.get(0);

Tương đương trong c # là gì?


4
Xem stackoverflow.com/questions/5326874/ cho một số cuộc thảo luận về việc nên sử dụng toán tử [] hay phương thức ElementAt ().
ngm

Câu trả lời:


362
list1[0];

Giả sử loại danh sách có một bộ chỉ mục được xác định.


5
Câu trả lời duy nhất giải thích tại sao có thể truy cập danh sách, đó là một đối tượng, như một mảng
PrashanD

Nó có trả về một bản sao của đối tượng trong danh sách không? obj = danh sách [0]; list.clear (); // obj vẫn sẽ được điền?
Paul McCarthy

1
@Paul McCarthy: bạn có thể dễ dàng tự kiểm tra điều này, nhưng Có. Một danh sách giữ các tham chiếu đến các đối tượng. Xóa danh sách không ảnh hưởng đến các đối tượng được giữ trong đó. Nếu không có tài liệu tham khảo nào khác cho các đối tượng đó, chúng sẽ là rác được thu thập tại một số thời điểm.
Mitch Wheat

242

Bạn có thể sử dụng phương thức mở rộng ElementAt trong danh sách.

Ví dụ:

// Get the first item from the list

using System.Linq;

var myList = new List<string>{ "Yes", "No", "Maybe"};
var firstItem = myList.ElementAt(0);

// Do something with firstItem

24
Chỉ cần lưu ý rằng ElementAt () yêu cầu using System.Linq;.
ngm

16
Có bất kỳ lợi thế cho điều này trên các myList[0]ký hiệu tiêu chuẩn ?
AnalogWeapon

5
"Tại sao tôi lại sử dụng Enumerable.EuityAt () so với toán tử []?" stackoverflow.com/questions/5326874/
Mạnh

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon đúng là có - bạn có thể sử dụng nó như một phần của chuỗi an toàn null, ví dụ myCollectionWhichMightBeNull?.ElementAt(0)hoặc để bảo vệ an toàn cho một yếu tố không tồn tại:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Câu hỏi cũ, nhưng tôi thấy rằng chủ đề này khá hoạt động gần đây, vì vậy tôi sẽ tiếp tục và ném hai xu của mình:

Chính xác là những gì Mitch nói. Giả sử lập chỉ mục thích hợp, bạn có thể tiếp tục và sử dụng ký hiệu dấu ngoặc vuông như thể bạn đang truy cập vào một mảng. Tuy nhiên, ngoài việc sử dụng chỉ mục số, nếu các thành viên của bạn có tên cụ thể, bạn thường có thể thực hiện tìm kiếm / truy cập đồng thời bằng cách nhập một cái gì đó như:

var temp = list1["DesiredMember"];

Bạn càng biết nhiều, phải không?


0

ListCấu trúc dữ liệu .NET là Arraymột "vỏ có thể thay đổi".

Vì vậy, bạn có thể sử dụng các chỉ mục để truy cập vào các yếu tố của nó như:

var firstElement = myList[0];
var secondElement = myList[1];

Bắt đầu với C # 8.0, bạn có thể sử dụng IndexRangecác lớp để truy cập các phần tử. Họ cung cấp quyền truy cập từ cuối chuỗi hoặc chỉ truy cập một phần cụ thể của chuỗi:

var lastElement = myList[^1]; // Using Index
var fiveElements = myList[2..7]; // Using Range, note that 7 is exclusive

Bạn có thể kết hợp các chỉ mục và phạm vi với nhau:

var elementsFromThirdToEnd = myList[2..^0]; // Index and Range together

Ngoài ra, bạn có thể sử dụng ElementAtphương pháp LINQ nhưng đối với 99% trường hợp thì điều này thực sự không cần thiết và chỉ là giải pháp hiệu suất chậm.


0

bạn có thể sử dụng chỉ mục để truy cập các yếu tố danh sách

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.