[英]Is there a better way to remove elements from list using c#?
我有一個對象列表。 如果任何屬性等於null
我希望從列表中刪除整個元素。 有沒有比這更好的方法呢?
我已經嘗試了循環和每個循環,要么無法弄清楚如何做或不完全了解如何完成我的任務。
var i = 0;
while (i < filterCriterias.Count())
{
if (filterCriterias[i].ColumnName == null
|| filterCriterias[i].Comparator == null
|| filterCriterias[i].Criteria == null)
{
filterCriterias.RemoveAt(i);
}
else
{
i++;
}
}
如果我有以下列表:
List<Order> orders = new List<Order>
{
new Order {ColumnName = null, OperantOrder = null},
new Order {ColumnName = Session, OperantOrder = ASC},
new Order {ColumnName = null, OperantOrder = null},
}
我只希望列表只包含其中columnName = session和operantorder = asc的元素1。
更慣用的方法是使用RemoveAll
:
filterCriterias.RemoveAll(c => c.ColumnName == null ||
c.Comparator == null ||
c.Criteria == null);
沒有必要刪除只需使用System.Linq
選擇你想要的System.Linq
如下所示。 這將返回一個新的集合。
var order = orders.Where(x => x.ColumnName == Session && x.OperantOrder == ASC).ToList();
您也可以考慮使用FirstOrDefault()
類的
var order = orders.FirstOrDefault(x => x.ColumnName == Session && x.OperantOrder == ASC);
要從列表中刪除項目時使用for
循環,通常最好從最后一個元素開始並向后工作。 這樣,您最終不會跳過項目或獲取IndexOutOfRange
異常,因為在循環期間Count
更改(在向前方向移除項目時會發生這種情況):
// Start at the last index and move towards index '0'
for (int i = filterCriterias.Count - 1; i >= 0; i--)
{
if (filterCriterias[i].ColumnName == null ||
filterCriterias[i].Comparator == null ||
filterCriterias[i].Criteria == null)
{
filterCriterias.RemoveAt(i);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.