0

假设我有一个有点像这样的对象模型:

public class MyModel
{
    public List<long> TotalItems { get; set; }
    public List<long> ItemsApples { get; set; }
    public List<long> ItemsOranges { get; set; }
    public List<long> ItemsPeaches { get; set; } 

    public void CombineItems()
    {

    }
}

现在实际上,模型中有大约 14 个多头列表。组合这些列表的最佳方法是什么,以便 TotalItems 是所有其他列表组合的列表。

感谢您的建议。

4

3 回答 3

2

创建一个新的List<long>,然后调用AddRange()以将每个现有列表添加到其中。

于 2012-09-09T01:18:11.280 回答
2
using System.Collections.Generic;
using System.Linq;

public class MyModel
{
    public List<long> TotalItems
    {
        get
        {
            return ItemsApples.Concat(ItemsOranges).Concat(ItemsPeaches).ToList(); // all lists conbined, including duplicates
            //return ItemsApples.Union(ItemsOranges).Union(ItemsPeaches).ToList(); // set of all items
        }
    }

    public List<long> ItemsApples { get; set; }

    public List<long> ItemsOranges { get; set; }

    public List<long> ItemsPeaches { get; set; }

    public void CombineItems()
    {

    }
}
于 2012-09-09T01:29:49.880 回答
2

除非您一次需要所有项目(而不是枚举它们),否则我会做这样的事情:

public IEnumerable<long> TotalItems 
{
    get 
    {
        foreach(var i in ItemsApples) 
            yield return i;
        foreach(var i in ItemsOranges)
            yield return i;
        foreach(var i in ItemsPeaches)
            yield return i;
    }
}

从那里开始,如果除了添加或删除 long 列表之外,您不想再维护该类,您可以通过反射获得一些乐趣:

public IEnumerable<long> TotalItems
{
    get
    {
        // this automatically discovers properties of type List<long>
        // and grabs their values
        var properties = from property in GetType().GetProperties()
                    where typeof(List<long>).IsAssignableFrom(property.PropertyType)
                    select (IEnumerable<long>)property.GetValue(this, null);

        foreach (var property in properties)
        {
            foreach (var value in property)
                yield return value;
        }
    }
}
于 2012-09-09T01:42:13.773 回答