उन तत्वों का चयन करें, जिन्हें आप नहीं चाहते हैं, जो तत्व आपको नहीं निकालना चाहते हैं। तत्वों को हटाने की तुलना में यह इतना आसान (और आमतौर पर अधिक कुशल भी) है।
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
मैं इसे माइकल डिलन द्वारा नीचे दी गई टिप्पणी के जवाब में एक टिप्पणी के रूप में पोस्ट करना चाहता था, लेकिन यह मेरे जवाब में वैसे भी बहुत लंबा और शायद उपयोगी है:
व्यक्तिगत रूप से, मैं कभी भी एक-एक करके आइटम नहीं निकालूंगा, यदि आपको हटाने की आवश्यकता है, तो कॉल करें RemoveAllजो एक विधेय लेता है और केवल एक बार आंतरिक सरणी को पुनर्व्यवस्थित Removeकरता है , जबकि Array.Copyआपके द्वारा हटाए गए प्रत्येक तत्व के लिए एक ऑपरेशन करता है । RemoveAllबहुत अधिक कुशल है।
और जब आप किसी सूची में पीछे की ओर मुड़ते हैं, तो आपके पास पहले से ही उस तत्व का सूचकांक होता है जिसे आप हटाना चाहते हैं, इसलिए यह कॉल करने के लिए अधिक कुशल होगा RemoveAt, क्योंकि Removeपहले सूची का एक ट्रावेल करता है ताकि आप उस तत्व का सूचकांक खोज सकें। 'हटाने की कोशिश कर रहा है, लेकिन आप पहले से ही उस सूचकांक को जानते हैं।
इसलिए सभी के लिए, मुझे कभी भी Removeलूप में कॉल करने का कोई कारण नहीं दिखता है । और आदर्श रूप से, यदि यह बिल्कुल संभव है, तो उपरोक्त कोड को सूची से तत्वों को स्ट्रीम करने के लिए उपयोग करें, ताकि कोई दूसरा डेटा संरचना बिल्कुल न बनाई जाए।