Disons que j'ai une liste de chaînes:
resultList = originalList.FindAll(o => o.StartsWith("XX")));
Je veux utiliser linq pour sélectionner et renvoyer une liste avec {"one", "two"} code >.
si je fais par exemple
originalList = { "XX.one", "XX.two", "YY.three" }
J'obtiendrai resultList = {"XX.one", "XX.two"} mais ce que je veux, c'est resultList = {"one", "two"}
Un moyen de résoudre ce problème?
EDIT: Merci pour tous ceux qui ont répondu, j'ai choisi la fonction split de @ er-mfahhgk car elle fait le minimum de manipulation et ne dépend pas de la taille du préfixe.
3 Réponses :
Vous pouvez essayer ceci:
resultList = originalList.Where(o => o.StartsWith("XX"))
.Select(x=>x.Substring(3))
.ToList();
(modifié pour corriger le libellé de la sous-chaîne)
Je ne sais pas pourquoi quelqu'un voterait contre la réponse (ce qui fonctionne). Vous n'avez qu'une faute de frappe ici (Substrting au lieu de Substring)
result = originalList.Where(o => o.StartsWith("XX"))
.Select(x=>x.Replace("XX.,""))
.ToList();
Vous pouvez utiliser Et enfin votre sortie sera, Sortie: SelectWith votre chaîne souhaitée, puis en utilisant la fonction Split sur Dot (. ), vous pouvez sélectionner la deuxième partie comme foreach (var item in resultList)
{
Console.WriteLine(item);
}
Console.ReadLine();
Une des raisons pour lesquelles je pense que certaines des autres réponses sont préférables est que cette réponse repose sur le fait qu'il n'y a qu'un seul . dans la chaîne. Certaines des autres réponses n'ont pas cette limitation.
La liste d'origine pourrait-elle contenir
XX.?XX?XX.XX?La liste a toujours le point ".". Il peut donc contenir XX.XX mais pas XX simplement
Salut @mjwills non. C'est une entrée contrôlée. Ce sera toujours XX. ou YY. etc ... Le "quelque chose" existera toujours