簡體   English   中英

有沒有更好的方法使用c#從列表中刪除元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM