繁体   English   中英

是否有使用LINQ将项目添加到集合属性的更简洁的方法?

[英]Is there a more succinct way of adding items to a collection property using LINQ?

有没有一行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; }
    }
}

不是LINQ,但是有AddRange

order.Items.AddRange(replacements);

但是您没有说什么是Items ,所以除非它是一个List ,否则该方法将不可用。

您可以编写以下内容:

order.Items.Clear();
replacements.ForEach(order.Items.Add);

或者,如果有addRange方法(在List<T>上可用):

order.Items.Clear();
order.Items.AddRange(replacements);

order.Items清单吗? 你可以有:

public static ReplaceItemsOnOrder(Order order, List<OrderItem> replacements)
{
    order.Items = new List<OrderItem>(replacements);
}

这是有道理的,因为在您的示例代码中,您似乎正在替换 order.Items的项目。 List<T>一个构造函数该构造函数接受IEnumerable<T>参数,该参数的内容将被复制到正在构造的列表中。

从某种意义上讲,如果在构造时发生错误(包括复制操作),则不会导致新列表半满,这也更安全。

不,Linq是关于选择而不是修改。

您可以编写自己的扩展方法来添加此功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM