Kiểm tra xem phần tử ở vị trí [x] có tồn tại trong danh sách hay không


88

Nếu tôi có một danh sách các chuỗi

List<String> list = new list<String>();
list.add("str1");
list.add("str2");
list.add("str3");

và tôi muốn biết liệu ví dụ vị trí chỉ mục 2 có chứa một phần tử hay không, có cách nào đơn giản để thực hiện việc này mà không cần tính độ dài của danh sách hoặc sử dụng try catch không?

Vì điều này sẽ không thành công, tôi có thể hoàn thành nó bằng cách thử nắm bắt, nhưng điều này có vẻ quá mức

if(list.ElementAt(2) != null)
{
   // logic
}

Câu trả lời:


216
if(list.ElementAtOrDefault(2) != null)
{
   // logic
}

ElementAtOrDefault () là một phần của System.Linqkhông gian tên.

Mặc dù bạn có một Danh sách, vì vậy bạn có thể sử dụng list.Count > 2.


4
Đọc nhanh hơn so với kiểm tra. Số lượng thông thường, nhưng xin lưu ý rằng các mục "null" về mặt lý thuyết có giá trị bên trong danh sách, vì vậy đừng dựa vào điều này để đưa ra ngoại lệ nếu kiểm tra không thỏa mãn.
AFract

1
Bạn có thể sử dụng dấu ?? toán tử tức là. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis

12
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}

5
ngay cả khi list.Count> mong muốnIndex được thỏa mãn, việc truy xuất phần tử sẽ ném ra một ngoại lệ nếu chỉ mục <0
AFract

2
tốt, đó là nitpicking. mong muốnIndex có thể sẽ là số dương. Nếu đó không phải là tuyên bố đáng tin cậy, chỉ cần thêm mong muốnIndex> -1 ..
SubjectX

@SubjectX - Không phải nitpicking. Việc sử dụng chỉ mục được trả về IndexOfcó thể là -1
Kyle Delaney

0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);

1
Câu trả lời chỉ có mã không được khuyến khích vì chúng không giải thích cách chúng giải quyết vấn đề. Vui lòng cập nhật câu trả lời của bạn để giải thích cách điều này cải thiện so với các câu trả lời được chấp nhận và ủng hộ khác mà câu hỏi này đã có. Ngoài ra, câu hỏi này đã được 7 năm, nỗ lực của bạn sẽ được đánh giá cao hơn bởi những người dùng có câu hỏi chưa được trả lời gần đây. Vui lòng xem lại Cách viết câu trả lời hay .
FluffyKitten
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.