Guide pratique pour interroger un ArrayList avec LINQ (C#)

Quand vous utilisez LINQ pour interroger des collections IEnumerable non génériques telles que ArrayList, vous devez déclarer explicitement le type de la variable de portée pour qu’il reflète le type spécifique des objets de la collection. Par exemple, si vous avez un ArrayList d’objets Student, votre clause from doit ressembler à ceci :

var query = from Student s in arrList  
//...

En spécifiant le type de la variable de portée, vous effectuez un cast de chaque élément du Student en ArrayList.

L’utilisation d’une variable de portée explicitement typée dans une expression de requête équivaut à appeler la méthode Cast. Cast lève une exception si le cast spécifié ne peut pas être effectué. Cast et OfType sont les deux méthodes d’opérateur de requête standard qui fonctionnent sur les types IEnumerable non génériques. Pour plus d’informations, consultez Relations des types dans des opérations de requête LINQ.

Exemple

L’exemple suivant montre une requête simple sur un ArrayList. Notez que cet exemple utilise des initialiseurs d’objets quand le code appelle la méthode Add, mais cela n’est pas une obligation.

using System;  
using System.Collections;  
using System.Linq;  
  
namespace NonGenericLINQ  
{  
    public class Student  
    {  
        public string FirstName { get; set; }  
        public string LastName { get; set; }  
        public int[] Scores { get; set; }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            ArrayList arrList = new ArrayList();  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Svetlana", LastName = "Omelchenko", Scores = new int[] { 98, 92, 81, 60 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Claire", LastName = "O’Donnell", Scores = new int[] { 75, 84, 91, 39 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Sven", LastName = "Mortensen", Scores = new int[] { 88, 94, 65, 91 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Cesar", LastName = "Garcia", Scores = new int[] { 97, 89, 85, 82 }  
                    });  
  
            var query = from Student student in arrList  
                        where student.Scores[0] > 95  
                        select student;  
  
            foreach (Student s in query)  
                Console.WriteLine(s.LastName + ": " + s.Scores[0]);  
        }  
    }  
}  
/* Output:
    Omelchenko: 98  
    Garcia: 97  
*/