96 votes

Meilleure façon de convertir IList ou IEnumerable en tableau

J'ai une requête HQL qui peut générer une liste IList de résultats ou une liste IEnumerable de résultats.

Cependant, je veux qu'il renvoie un tableau de l'entité que je sélectionne, quel serait le meilleur moyen d'y parvenir? Je peux soit l'énumérer et construire le tableau, soit utiliser CopyTo () un tableau défini.

Y a-t-il une meilleure façon? Je suis allé avec l'approche CopyTo.

160voto

Jon Skeet Points 692016

Quelle version de .NET utilisez-vous? S'il s'agit de .NET 3.5, j'appellerais simplement ToArray() et j'aurais terminé.

Si vous ne possédez qu'un IEnumerable non générique, procédez comme suit:

 IEnumerable query = ...;
MyEntityType[] array = query.Cast<MyEntityType>().ToArray();
 

Si vous ne connaissez pas le type dans cette méthode mais que les appelants de la méthode le connaissent, rendez la méthode générique et essayez ceci:

 public static void T[] PerformQuery<T>()
{
    IEnumerable query = ...;
    T[] array = query.Cast<T>().ToArray();
    return array;
}
 

46voto

Michael Joyce Points 161

Mettez ce qui suit dans votre fichier .cs:

 using System.Linq;
 

Vous pourrez ensuite utiliser la méthode d'extension suivante à partir de System.Linq.Enumerable:

public statique TSource [] ToArray (cette source System.Collections.Generic.IEnumerable)

C'est à dire

 IEnumerable<object> query = ...;
object[] bob = query.ToArray();
 

6voto

Philippe Matray Points 34

J'ai envie de réinventer la roue ...

 public static T[] ConvertToArray<T>(this IEnumerable<T> enumerable)
{
    if (enumerable == null)
        throw new ArgumentNullException("enumerable");

    return enumerable as T[] ?? enumerable.ToArray();
}
 

Prograide.com

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.

Powered by:

X