Sdílet prostřednictvím


Postupy: Vytvoření dotazu na znaky v řetězci (LINQ)

Protože String třída implementuje obecného IEnumerable rozhraní, můžete vyhledávat řetězec jako posloupnost znaků.To se však často LINQ.Komplexní porovnávání operací, použít Regex třídy.

Příklad

Následující příklad vyhledá určit počet číslic, které obsahuje řetězec.Všimněte si, že dotaz je "opakovaně" po provedení první.Je to možné, protože samotný dotaz neukládá žádné skutečné výsledky.

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
*/

Probíhá kompilace kódu

  • Vytvoření Visual Studio projektu, který se zaměřuje .NET Framework verze 3.5.Ve výchozím nastavení projektu odkazuje na System.Core.dll a using směrnice (C#) nebo Imports prohlášení (Visual Basic) pro obor názvů System.Linq.V jazyce C# projekty, přidejte using směrnice pro obor názvů System.IO.

  • Zkopírujte tento kód do projektu.

  • Stisknutím klávesy F5 sestavit a spustit program.

  • Stisknutím libovolné klávesy uzavřete okno konzoly.

Viz také

Úkoly

Postupy: Kombinace dotazů LINQ s regulárními výrazy

Koncepty

LINQ a řetězce