Comment : interroger des caractères dans une chaîne (LINQ)
Mise à jour : novembre 2007
Étant donné que la classe String implémente l'interface IEnumerable<T> générique, toute chaîne peut être interrogée comme une séquence de caractères. Toutefois, il ne s'agit pas d'une utilisation courante de LINQ. Pour les opérations de mise en correspondance de modèles complexes, utilisez la classe Regex.
Exemple
L'exemple suivant interroge une chaîne pour déterminer le nombre de chiffres qu'elle contient. Notez que la requête est « réutilisée » après sa première exécution. Ceci est possible, car la requête elle-même ne stocke aucun résultat réel.
Class QueryAString
Shared Sub Main()
' A string is an IEnumerable data source.
Dim aString As String = "ABCDE99F-J74-12-89A"
' Select only those characters that are numbers
Dim stringQuery = From ch In aString _
Where Char.IsDigit(ch) _
Select ch
' Execute the query
For Each c As Char In stringQuery
Console.Write(c & " ")
Next
' Call the Count method on the existing query.
Dim count As Integer = stringQuery.Count()
Console.WriteLine(System.Environment.NewLine & "Count = " & count)
' Select all characters before the first '-'
Dim stringQuery2 = aString.TakeWhile(Function(c) c <> "-")
' Execute the second query
For Each ch In stringQuery2
Console.Write(ch)
Next
Console.WriteLine(System.Environment.NewLine & "Press any key to exit")
Console.ReadKey()
End Sub
End Class
' Output:
' 9 9 7 4 1 2 8 9
' Count = 8
' ABCDE99F
class QueryAString
{
static void Main()
{
string aString = "ABCDE99F-J74-12-89A";
// Select only those characters that are numbers
IEnumerable<char> stringQuery =
from ch in aString
where Char.IsDigit(ch)
select ch;
// Execute the query
foreach (char c in stringQuery)
Console.Write(c + " ");
// Call the Count method on the existing query.
int count = stringQuery.Count();
Console.WriteLine("Count = {0}", count);
// Select all characters before the first '-'
IEnumerable<char> stringQuery2 = aString.TakeWhile(c => c != '-');
// Execute the second query
foreach (char c in stringQuery2)
Console.Write(c);
Console.WriteLine(System.Environment.NewLine + "Press any key to exit");
Console.ReadKey();
}
}
/* Output:
Output: 9 9 7 4 1 2 8 9
Count = 8
ABCDE99F
*/
Compilation du code
Créez un projet Visual Studio qui cible la version 3.5 du .NET Framework. Par défaut, le projet possède une référence à System.Core.dll et une directive using (C#) ou une instruction Imports (Visual Basic) pour l'espace de noms System.Linq. Dans les projets C#, ajoutez une directive using pour l'espace de noms System.IO.
Copiez ce code dans votre projet.
Appuyez sur F5 pour compiler et exécuter le programme.
Appuyez sur une touche pour quitter la fenêtre de console.
Voir aussi
Tâches
Comment : combiner des requêtes LINQ avec des expressions régulières