ตรวจสอบว่ามีองค์ประกอบที่ตำแหน่ง [x] อยู่ในรายการหรือไม่


91

ถ้าฉันมีรายชื่อของสตริง

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

และฉันต้องการทราบว่าตัวอย่างเช่นตำแหน่งดัชนี 2 มีองค์ประกอบหรือไม่มีวิธีง่ายๆในการดำเนินการนี้โดยไม่ต้องนับความยาวของรายการหรือใช้ try catch หรือไม่

เนื่องจากจะล้มเหลวฉันสามารถปัดเศษได้ด้วยการลองจับ แต่ดูเหมือนว่าจะมากเกินไป

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

คำตอบ:


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

ElementAtOrDefault () เป็นส่วนหนึ่งของSystem.Linqเนมสเปซ

แม้ว่าคุณจะมีรายชื่อคุณจึงสามารถใช้list.Count > 2ไฟล์.


4
อ่านได้เร็วกว่าการตรวจสอบ. นับทั่วไป แต่โปรดทราบว่ารายการ "null" นั้นถูกต้องตามหลักทฤษฎีภายในรายการดังนั้นอย่าใช้สิ่งนี้เพื่อโยนข้อยกเว้นหากไม่พอใจการทดสอบ
หลัง

1
คุณสามารถใช้?? ตัวดำเนินการเช่น. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis

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

5
แม้ว่าจะพอใจ list.Count> neededIndex การดึงองค์ประกอบจะทำให้เกิดข้อยกเว้นหากดัชนี <0
หลัง

2
นั่นคือ nitpicking desireIndex อาจเป็นจำนวนบวก หากนั่นไม่ใช่การอ้างสิทธิ์ที่เชื่อถือได้เพียงแค่ใส่ค่าที่ต้องการ> -1 ..
SubjectX

1
@SubjectX - ไม่ใช่ nitpicking เป็นเรื่องปกติที่จะใช้ดัชนีที่ส่งคืนIndexOfซึ่งสามารถเป็น -1
Kyle Delaney

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

2
คำตอบแบบใช้รหัสเท่านั้นไม่ได้รับการสนับสนุนเนื่องจากไม่ได้อธิบายวิธีแก้ปัญหา โปรดอัปเดตคำตอบของคุณเพื่ออธิบายว่าสิ่งนี้จะช่วยปรับปรุงคำตอบอื่น ๆ ที่ได้รับการยอมรับและได้รับการโหวตแล้วได้อย่างไร นอกจากนี้คำถามนี้มีอายุ 7 ปีความพยายามของคุณจะได้รับการชื่นชมมากขึ้นจากผู้ใช้ที่มีคำถามที่ยังไม่ได้ตอบล่าสุด โปรดตรวจสอบฉันจะเขียนคำตอบที่ดีได้อย่างไร
FluffyKitten
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.