结合长篇名单

时间:2012-09-09 01:16:54

标签: c#

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

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是所有其他列表的列表。

感谢您的建议。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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()
    {

    }
}

答案 2 :(得分: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;
    }
}

从那里开始,如果你想在不添加或删除长片列表的情况下再次维护课程,你可以通过反思获得一些乐趣:

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;
        }
    }
}