Je veux initialiser une liste avec un objet et une liste d'objets dans cet ordre spécifique. Actuellement, je fais:
List<MyObject> list = new List<MyObject>();
list.Add(object1); // object1 is type MyObject
list.AddRange(listOfObjects); // listOfObjects is type List<MyObject>
J'espérais consolider cela dans une instruction d'initialisation (la syntaxe est erronée bien sûr):
List<MyObject> newList = new List<MyObject>() { object1, listOfObjects };
Existe-t-il un moyen de le faire de manière concise?
Si l'ordre des éléments n'est pas important, vous pouvez utiliser:
List<MyObject> newList = new List<MyObject>(listOfObjects) { object1 };
Cela fonctionne en utilisant le List<T>
constructeur qui accepte un IEnumerable<T>
, puis l'initialiseur de collection pour ajouter les autres éléments. Par exemple, les éléments suivants:
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();
}
Imprime:
3
4
5
2
Notez que la commande est différente de votre original, cependant, car l'article individuel est ajouté dernier.
Si l'ordre est important, cependant, je construirais personnellement la liste, en plaçant votre premier objet dans l'initialiseur et en appelant AddRange
:
List<MyObject> newList = new List<MyObject> { object1 };
newList.AddRange(listOfObjects);
Cela rend l'intention très claire et évite la construction d'éléments temporaires (ce qui serait nécessaire en utilisant Concat de LINQ, etc.).
Je pense que le mieux que vous puissiez faire est:
List<MyObject> newList = new[] { object1 }.Concat(listOfObjects).ToList();