我有一个对象列表。如果任何属性等于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},
}
我只希望列表仅包含元素1,其中columnName =会话,operantorder = asc。
答案 0 :(得分:10)
更惯用的方法是使用RemoveAll
:
var obj = {
"set1": [1, 2, 3],
"set2": [4, 5, 6, 7, 8],
"set3": [9, 10, 11, 12]
};
jQuery.each(obj, function(i, val) {
console.log(i); // "set1"
console.log(val); // [1, 2, 3]
});
答案 1 :(得分:1)
无需使用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);
答案 2 :(得分:1)
要从列表中删除项目时使用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);
}
}