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