Eğer elemanları seçip yok doğrusu sen unsurları kaldırmaya çalışırken daha istiyoruz değil istiyorum. Bu, elemanları çıkarmaktan çok daha kolaydır (ve genellikle de daha verimlidir).
var newSequence = (from el in list
where el.Something || el.AnotherThing < 0
select el);
Aşağıdaki Michael Dillon tarafından bırakılan yoruma yanıt olarak bunu bir yorum olarak göndermek istedim, ancak yine de cevabımda olması çok uzun ve muhtemelen yararlı:
Şahsen, kaldırmaya ihtiyacınız varsa, öğeleri tek tek kaldırmam, kaldırmaya ihtiyacınız varsa, RemoveAll
bu durumda bir yüklem alır ve yalnızca iç diziyi bir kez yeniden düzenler, oysa kaldırdığınız her öğe için Remove
bir Array.Copy
işlem yapar . RemoveAll
çok daha verimlidir.
Ve bir liste üzerinde geriye doğru yinelendiğinizde, kaldırmak istediğiniz öğenin dizinine zaten sahipsiniz, bu nedenle aramak çok daha verimli olacaktır RemoveAt
, çünkü Remove
önce öğenin dizinini bulmak için listenin bir geçişini yapar kaldırmaya çalışıyorsunuz, ancak bu dizini zaten biliyorsunuz.
Sonuçta Remove
, bir for-loop'u aramak için hiçbir neden göremiyorum . İdeal olarak, eğer mümkünse, listeden öğeleri gerektiği gibi akışa almak için yukarıdaki kodu kullanın, böylece hiçbir ikinci veri yapısının oluşturulması gerekmez.