2 votes

Quelle est la signification de ce code ? (IEnumerable<int> query = from num in list)

Qu'est-ce que ça veut dire ?

IEnumerable<int> query = from num in list
                         where num < 3
                         select num;

Est-ce un objet comme IEnumerable<T> ?

Quelqu'un peut-il le décrire ?

5voto

Virtlink Points 12475

Vous connaissez la syntaxe normale des méthodes, non ? Des choses comme list.Add(10) . Certains esprits malins de Microsoft ont remarqué qu'il existe des similitudes dans de nombreuses collections et listes. Les gens pourraient aimer faire des choses comme sélectionner certaines valeurs et additionner des valeurs qui devraient fonctionner sur tous sans que chaque collection fournisse une méthode pour cela.

Ils ont donc introduit méthodes d'extension Il s'agit de méthodes qui ne sont définies qu'une seule fois mais qui peuvent être appliquées à tous les objets d'un certain type, comme les collections. Voici quelques exemples list.Where et list.Sum . Pour utiliser les méthodes d'extension, vous devez ajouter l'espace de nom dans lequel ils sont définis . Le site Where La méthode d'extension prend une expression lambda qui est exécutée sur chaque élément de la collection.

Disons que vous avez une liste d'entiers :

List<int> list = new List<int>();
list.Add(-1);
list.Add(0);
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);

Ensuite, là où je devais auparavant écrire le code suivant pour obtenir uniquement les entiers inférieurs à trois :

List<int> query = new List<int>();
foreach(var nr in list)
{
    if (nr < 3)
        query.Add(nr);
}

Maintenant, en utilisant les méthodes d'extension, je peux l'écrire comme ceci :

IEnumerable<int> query = list.Where(nr => nr < 3);

Lorsqu'il est énuméré, query ne retournera que les entiers de list qui sont inférieurs à trois. Ces méthodes d'extension font partie intégrante de LINQ, la Langue Requête intégrée .

Cependant, pour rendre LINQ plus facile à utiliser, ils ont conçu une nouvelle syntaxe. Grâce à cette nouvelle syntaxe, LINQ est plus facile à lire et à écrire.

IEnumerable<int> query = from nr in list
                         where nr < 3
                         select nr;

Le compilateur prend la nouvelle syntaxe et la traduit dans le code mentionné précédemment, qui comprend l'élément Where méthode. Vous voyez, c'est juste du sucre syntaxique pour faciliter le travail avec les collections.

Le site IEnumerable<int> interface est une interface générique pour tout objet qui peut être énuméré. La forme la plus simple de l'énumération est de faire foreach sur l'objet, et il retourne tous les entiers qu'il contient, un par un. Ainsi, la requête LINQ renvoie un objet quelconque mais vous ne savez pas exactement de quel type. Mais vous savez qu'il peut être énuméré, ce qui le rend très utile.

2voto

Tony Hopkinson Points 15160

C'est l'équivalent en linq de dire

IEnumerable<int> GetLessThanThree(IEnumerable<int> list)
{
   foreach(int num in list)
   {
     if (num < 3)
     {
        yield return num
     }
   }
}

ou si vous n'avez pas encore rencontré le rendement

IEnumerable<int> GetLessThanThree(IEnumerable<int> list)
{
   List<int> result = new List<int>();
   foreach(int num in list)
   {
     if (num < 3)
     {
        result.Add(num);
     }
   }
   return result;
}

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