web-dev-qa-db-fra.com

Rechercher une sous-chaîne dans une liste de chaînes

J'ai une liste comme ça et je veux pouvoir chercher dans cette liste une sous-chaîne provenant d'une autre chaîne. Exemple:

List<string> list = new List<string>();
string srch = "There";
list.Add("1234 - Hello");
list.Add("4234 - There");
list.Add("2342 - World");

Je souhaite rechercher "There" dans ma liste et renvoyer "4234 - There". J'ai essayé:

var mySearch = list.FindAll(S => s.substring(srch));
foreach(var temp in mySearch)
{
    string result = temp;
}
17
user1380621

Avec Linq, il suffit de récupérer le premier résultat:

string result = list.FirstOrDefault(s => s.Contains(srch));

Pour ce faire sans Linq (par exemple, pour une version antérieure de .NET telle que .NET 2.0), vous pouvez utiliser la méthode FindAll de List<T>, qui dans ce cas renverrait tous les éléments de la liste contenant le terme recherché:

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
24
BrokenGlass

Pour renvoyer toutes les entrées:

IEnumerable<string> result = list.Where(s => s.Contains(search));

Seulement le premier:

string result = list.FirstOrDefault(s => s.Contains(search));
10
abatishchev

Ce que vous avez écrit est à l'origine de l'erreur de compilation

La meilleure correspondance de méthode surchargée pour 'string.Substring (int)' contient des arguments non valides.

La sous-chaîne est utilisée pour obtenir une partie de la chaîne en utilisant la position du caractère et/ou la longueur de la chaîne résultante.

par exemple srch.Substring(1, 3) renvoie la chaîne "elle"

Comme d'autres l'ont mentionné, vous devriez utiliser Contains qui vous indique si une chaîne se produit dans une autre. Si vous vouliez connaître la position actuelle, vous utiliseriez IndexOf

1
Conrad Frix

j'aime utiliser indexOf ou contient

someString.IndexOf("this");
someString.Contains("this");
0
unarity

même problème je devais faire.

Tu en as besoin:

myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1)

Où:

myList est List<String> a les valeurs que myString doit contenir à n’importe quelle position

Donc, de facto, vous recherchez si myString contient l'une des entrées de la liste. J'espère que c'est ce que tu voulais ...

0
a joka