La création de N objets et en les ajoutant à une liste
J'ai une méthode qui prend en N, le nombre d'objets que je veux créer, et j'ai besoin de retourner une liste de N objets.
Actuellement je peux le faire avec une simple boucle:
private static IEnumerable<MyObj> Create(int count, string foo)
{
var myList = new List<MyObj>();
for (var i = 0; i < count; i++)
{
myList .Add(new MyObj
{
bar = foo
});
}
return myList;
}
Et je me demandais si il y a une autre façon, peut-être avec LINQ pour créer cette liste.
J'ai essayé:
private static IEnumerable<MyObj> CreatePaxPriceTypes(int count, string foo)
{
var myList = new List<MyObj>(count);
return myList.Select(x => x = new MyObj
{
bar = foo
});
}
Mais cela ne semble pas remplir ma liste.
J'ai tenté de changer le sélectionner pour un foreach mais c'est la même affaire.
J'ai réalisé que la liste a de l' capacité du comte et de LINQ n'est pas de trouver tous les éléments pour effectuer une itération.
myList.ForEach(x => x = new MyObj
{
bar = foo
});
Est-il correct de LINQ opérateur à utiliser pour obtenir que cela fonctionne? Ou devrais-je simplement s'en tenir à la boucle?
- LINQ est un outil de requête, il ne devrait pas être utilisé en excès pour la création d'objets
- Opérateurs Linq comme
.Select()
sont purement pour l'interrogation des ensembles et se projeter pour les formulaires requis; ils ne sont pas destinés à faire tout ce qui modifie le jeu original. Ce que vous essayez de faire avec.Select()
n'est pas recommandé, mais il peut être fait au travail. Je collerais avec la boucle. - cela peut être d'une certaine valeur: blogs.msdn.com/b/ericlippert/archive/2009/05/18/...
- si vous voulez pimenter vous pouvez utiliser
yield return new MyObj(){ ... };
au lieu de sauver le temporaire de la liste - Ne serait pas
MyObj[100].AsEnumerable()
travail?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Range
de créer une séquence:Si vous souhaitez créer un
List
, vous auriez àToList
il.Mais rappelez vous, c'est (sans doute) une non-solution évidente, afin de ne pas jeter de la façon itérative de la création de la liste pour l'instant.
Range
ouRepeat
, puisque vous n'avez pas à utiliser l'objet dansSelect
. Ce qui importe, c'est qu'il génère une séquence de N éléments, dont vous avez besoin pour créer exactement N de nouveaux objets...Vous pouvez créer générique des méthodes d'assistance, comme suit:
Puis vous pouvez les utiliser comme ceci:
Vous pouvez Utiliser Énumérable.Répétez
Pour plus d'informations, lisez https://msdn.microsoft.com/en-us/library/bb348899(v=vs. 110).aspx