我想使用对象和特定顺序的对象列表初始化列表。目前,我正在做:
List<MyObject> list = new List<MyObject>();
list.Add(object1); // object1 is type MyObject
list.AddRange(listOfObjects); // listOfObjects is type List<MyObject>
我希望将其合并到初始化语句中(当然语法错误):
List<MyObject> newList = new List<MyObject>() { object1, listOfObjects };
有没有办法简明扼要地做到这一点?
答案 0 :(得分:26)
如果元素的顺序不重要,您可以使用:
List<MyObject> newList = new List<MyObject>(listOfObjects) { object1 };
这可以通过使用接受List<T>
的{{1}}构造函数,然后使用集合初始值设定项来添加其他项目。例如,以下内容:
IEnumerable<T>
将打印:
static void Main()
{
int test = 2;
List<int> test2 = new List<int>() { 3, 4, 5 };
List<int> test3 = new List<int>(test2) { test };
foreach (var t in test3) Console.WriteLine(t);
Console.ReadKey();
}
请注意,订单与原始订单不同,因为单个商品已添加 last 。
但是,如果订单很重要,我个人只需构建列表,将第一个对象放入初始化程序中,然后调用3
4
5
2
:
AddRange
这使得意图非常明确,并避免构建临时项目(使用LINQ的Concat等需要)。
答案 1 :(得分:8)
我认为你能做的最好的事情是:
List<MyObject> newList = new[] { object1 }.Concat(listOfObjects).ToList();
答案 2 :(得分:1)
这可以借助扩展方法来实现,例如
public static class CollectionExtensions
{
public static void Add<T>(this ICollection<T> collection, IEnumerable<T> itemsToAdd)
{
foreach (var item in itemsToAdd)
{
collection.Add(item);
}
}
}
用法与问题中所建议的完全相同
List<MyObject> newList = new List<MyObject>() { object1, listOfObjects };
可以在C#编程指南中找到有关Object and Collection Initializers的一些解释(我找不到更好的词):
集合初始值设定项可让您指定一个或多个元素 初始化实现的集合类型时的初始值设定项 IEnumerable并具有带有适当签名的Add作为实例 方法或扩展方法。