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のlongのリストがあります。TotalItemsが結合された他のすべてのリストのリストになるように、これらのリストを結合するための最良の方法は何ですか。

あなたの提案をありがとう。

4

3 に答える 3

2

Create a new List<long>, then call AddRange() to add each of your existing lists to it.

于 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 に答える