假设我有一个像这样的对象模型:
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是所有其他列表的列表。
感谢您的建议。
答案 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;
}
}
}