177 votes

Vérifier si la liste contient un élément qui contient une chaîne et obtenir cet élément.

En cherchant une réponse à cette question, je suis tombé sur des questions similaires utilisant LINQ, mais je n'ai pas été en mesure de les comprendre pleinement (et donc de les mettre en œuvre), car je ne suis pas familiarisé avec ce système. Ce que je voudrais faire, en gros, c'est ceci :

  1. Vérifie si un élément d'une liste contient une chaîne spécifique.
  2. Si c'est le cas, prenez cet élément.

Honnêtement, je ne sais pas comment je m'y prendrais pour faire ça. Ce que j'ai pu trouver, c'est ceci (qui ne fonctionne pas, bien sûr) :

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));

Je sais pourquoi ça ne marche pas :

  • myList.Contains() ne renvoie pas true car il vérifiera si un élément entier de la liste correspond à la chaîne que j'ai spécifiée.
  • myList.IndexOf() ne trouvera pas d'occurrence, puisque, comme c'est le cas à nouveau, il vérifiera un élément correspondant à la chaîne.

Pourtant, je n'ai aucune idée de la façon de résoudre ce problème, mais je me dis que je vais devoir utiliser LINQ comme suggéré dans des questions similaires à la mienne. Ceci étant dit, si c'est le cas ici, j'aimerais que la personne qui répond m'explique l'utilisation de LINQ dans son exemple (comme je l'ai dit, je ne m'en suis jamais occupé depuis que j'utilise C#). Merci d'avance les gars (et les filles ?).

EDIT : J'ai trouvé une solution ; il suffit de faire une boucle dans la liste, de vérifier si l'élément actuel contient la chaîne de caractères, puis de définir une chaîne de caractères égale à l'élément actuel. Je me demande cependant s'il existe une méthode plus efficace que celle-ci ?

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}

1voto

deleb Points 492

Il est possible de combiner Any, Where, First et FirstOrDefault, ou de placer le prédicat dans n'importe laquelle de ces méthodes en fonction des besoins.

Vous devriez probablement éviter d'utiliser First à moins que vous ne vouliez qu'une exception soit levée lorsqu'aucune correspondance n'est trouvée. FirstOrDefault est généralement la meilleure option tant que vous savez qu'il retournera la valeur par défaut du type si aucune correspondance n'est trouvée (la valeur par défaut de string est null, int est 0, bool est false, etc).

using System.Collections.Generic;
using System.Linq;

bool exists;
string firstMatch;
IEnumerable<string> matchingList;

var myList = new List<string>() { "foo", "bar", "foobar" };

exists = myList.Any(x => x.Contains("o"));
// exists => true

firstMatch = myList.FirstOrDefault(x => x.Contains("o"));
firstMatch = myList.First(x => x.Contains("o"));
// firstMatch => "foo"

firstMatch = myList.First(x => x.Contains("dark side"));
// throws exception because no element contains "dark side"

firstMatch = myList.FirstOrDefault(x => x.Contains("dark side"));
// firstMatch => null

matchingList = myList.Where(x => x.Contains("o")); 
// matchingList => { "foo", "foobar" }

Testez ce code @ https://rextester.com/TXDL57489

0voto

Pawel Czapski Points 1339

Je n'ai pas vu l'option bool dans d'autres réponses, donc j'espère que le code ci-dessous aidera quelqu'un.

Il suffit d'utiliser Any()

string myString = "test";
bool exists = myList
             .Where(w => w.COLUMN_TO_CHECK.Contains(myString)).Any();

-1voto

Abhay.Patil Points 147

Vous pouvez vérifier que la liste est vide ou non de plusieurs façons.

1) La liste de contrôle est nulle et le nombre de contrôles est supérieur à zéro, comme ci-dessous:-

if(myList!=null && myList.Count>0)
{
    //List has more than one record.
}

2)Vérifiez la liste nulle et le nombre supérieur à zéro en utilisant une requête linq comme ci-dessous:-.

if(myList!=null && myList.Count>0)
{
    //List has more than one record.
}

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