เลือกองค์ประกอบที่คุณไม่ต้องการมากกว่าการพยายามที่จะเอาองค์ประกอบที่คุณไม่ต้องการ สิ่งนี้ง่ายกว่ามาก (และโดยทั่วไปก็มีประสิทธิภาพมากกว่าด้วย) กว่าการลบองค์ประกอบ
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
ฉันต้องการโพสต์สิ่งนี้เป็นความคิดเห็นเพื่อตอบสนองต่อความคิดเห็นที่เหลือโดย Michael Dillon ด้านล่าง แต่มันยาวเกินไปและอาจมีประโยชน์ในการตอบคำถามของฉัน:
โดยส่วนตัวแล้วฉันจะไม่ลบรายการทีละรายการถ้าคุณต้องการลบออกแล้วเรียกRemoveAll
ว่าใช้เพรดิเคตและจัดเรียงอาร์เรย์ภายในใหม่เพียงครั้งเดียวในขณะที่Remove
การArray.Copy
ดำเนินการสำหรับทุกองค์ประกอบที่คุณลบออกRemoveAll
มีประสิทธิภาพมากขึ้นอย่างมากมาย
และเมื่อคุณย้อนกลับไปซ้ำในรายการคุณมีดัชนีขององค์ประกอบที่คุณต้องการลบอยู่แล้วดังนั้นมันจะมีประสิทธิภาพมากกว่าในการโทรRemoveAt
เพราะRemove
อันดับแรกคือการสำรวจเส้นทางของรายการเพื่อค้นหาดัชนีขององค์ประกอบที่คุณ กำลังพยายามลบ แต่คุณรู้อยู่แล้วว่าดัชนีนั้น
ดังนั้นโดยรวมแล้วฉันไม่เห็นเหตุผลใด ๆ ที่จะโทรRemove
หาความจริง และถ้าเป็นไปได้ให้ใช้โค้ดด้านบนเพื่อสตรีมองค์ประกอบจากรายการตามต้องการดังนั้นจึงไม่มีการสร้างโครงสร้างข้อมูลที่สองเลย