是否有一行LINQ语句将替换下面代码中的foreach循环?
public static ReplaceItemsOnOrder(Order order, List<OrderItem> replacements)
{
order.Items.Clear();
foreach (var item in replacements)
{
order.Items.Add(item);
}
}
编辑:
以下是Order
类的简化定义:
public class Order
{
private Collection<OrderItem> _items = new Collection<OrderItem>();
public Collection<OrderItem> Items
{
get { return _items; }
}
}
答案 0 :(得分:3)
答案 1 :(得分:3)
您可以写下以下内容:
order.Items.Clear();
replacements.ForEach(order.Items.Add);
或者,如果有一个addRange方法(List<T>
上可用):
order.Items.Clear();
order.Items.AddRange(replacements);
答案 2 :(得分:2)
order.Items
是一个列表吗?你可以:
public static ReplaceItemsOnOrder(Order order, List<OrderItem> replacements)
{
order.Items = new List<OrderItem>(replacements);
}
这是有道理的,因为在您的示例代码中,您似乎替换 order.Items
中的项目。 List<T>
有a constructor,它接受IEnumerable<T>
参数,其内容将被复制到正在构建的列表中。
在某种意义上说,如果在构造时发生错误(包括复制操作),它也会更安全,它不会产生半满的新列表。
答案 3 :(得分:2)
不,Linq是关于选择而不是修改。
您可以编写自己的扩展方法来添加此功能。