mag*_*low 2 .net c# linq lambda
此函数应该在IEnumerable <Order>上设置降序编号,但它不起作用.谁能告诉我它有什么问题?
private void orderNumberSetter(IEnumerable<Order> orders)
{
var i = 0;
Action<Order, int> setOrderNumber = (Order o, int count) =>
{
o.orderNumber = i--;
};
var orderArray = orders.ToArray();
for (i = 0; i < orders.Count(); i++)
{
var order = orderArray[i];
setOrderNumber(order, i);
}
}
Run Code Online (Sandbox Code Playgroud)
您正在重新使用i作为循环变量并i在setOrderNumberlambda中进行修改i- 不要修改- 它不清楚您的意图,可能如下:
Action<Order, int> setOrderNumber = (Order o, int count) =>
{
o.orderNumber = count;
};
Run Code Online (Sandbox Code Playgroud)
如果是上面的情况你可以实现那么多,但更容易,你的代码似乎不必要地复杂,即:
for (i = 0; i < orderArray.Length; i++)
{
orderArray[i].orderNumber = i;
}
Run Code Online (Sandbox Code Playgroud)
甚至更简单,而不必创建一个数组:
int orderNum = 0;
foreach(var order in orders)
{
order.orderNumber = orderNum++;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
要设置降序编号,您可以先确定订单数量,然后从那里向后退货:
int orderNum = orders.Count();
foreach(var order in orders)
{
order.orderNumber = orderNum--;
}
Run Code Online (Sandbox Code Playgroud)
以上将按降序生成一个基于订单的编号.另一种更直观且可能更容易维护的方法是以相反的顺序遍历枚举:
int orderNum = 0;
foreach(var order in orders.Reverse())
{
order.orderNumber = orderNum++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |