Comment puis-je convertir un List<MyObject>
d'un IEnumerable<MyObject>
, puis de nouveau?
Je veux faire cela dans le but d'exécuter une série de LINQ déclarations sur la Liste, l'e. g. Sort()
Comment puis-je convertir un List<MyObject>
d'un IEnumerable<MyObject>
, puis de nouveau?
Je veux faire cela dans le but d'exécuter une série de LINQ déclarations sur la Liste, l'e. g. Sort()
Un List<T>
est IEnumerable<T>
, donc en fait, il n'y a pas besoin de "convertir" un List<T>
d'un IEnumerable<T>
.
Depuis un List<T>
est IEnumerable<T>
, vous pouvez tout simplement créer un List<T>
pour une variable de type IEnumerable<T>
.
À l'inverse, ne sont pas tous IEnumerable<T>
est List<T>
offcourse, alors vous aurez à appeler l' ToList()
méthode de membre de l' IEnumerable<T>
.
Un List<T>
est déjà un IEnumerable<T>
, de sorte que vous pouvez exécuter LINQ états directement sur votre List<T>
variable.
Si vous ne voyez pas l'extension LINQ méthodes comme OrderBy()
je suppose que c'est parce que vous ne disposez pas d'un using System.Linq
directive dans votre fichier source.
Vous avez besoin de convertir l'expression LINQ résultat en List<T>
explicitement, si:
List<Customer> list = ...
list = list.OrderBy(customer => customer.Name).ToList()
De côté: à Noter que la norme des opérateurs LINQ (comme pour l'exemple précédent) ne pas modifier l' existant de la liste - list.OrderBy(...).ToList()
permettra de créer une nouvelle liste en fonction de l'ordre. Il est assez facile, cependant, de créer une méthode d'extension qui vous permet d'utiliser les lambdas avec List<T>.Sort
:
static void Sort<TSource, TValue>(this List<TSource> list,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
list.Sort((x,y) => comparer.Compare(selector(x), selector(y)));
}
static void SortDescending<TSource, TValue>(this List<TSource> list,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
list.Sort((x,y) => comparer.Compare(selector(y), selector(x)));
}
Ensuite, vous pouvez utiliser:
list.Sort(x=>x.SomeProp); // etc
Cette mise à jour de l' existant de la liste de la même manière qu' List<T>.Sort
le fait habituellement.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.