Neu in .NET 9.0 [19]: EnumerateSplits() für reguläre Ausdrücke

Die neue Methode zum Aufteilen von Zeichenketten vermeidet Speicherallokationen.

vorlesen Druckansicht 7 Kommentare lesen

(Bild: Pincasso/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die Klasse System.Text.RegularExpressions.Regex bietet in .NET 9.0 eine neue Methode EnumerateSplits() in Ergänzung zu der bestehenden Methode Split():

Der Dotnet-Doktor – Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

  • Die bestehende Methode Split() spaltet eine Zeichenkette (Klasse String) in Teile auf, entsprechend der angegebenen Trennungszeichen.
  • Die neue Methode EnumerateSplits() erwartet hingegen als Eingabe die Zeichenkette als ReadOnlySpan<char> und liefert als Rückgabe Range-Objekte, die auf Teile der Eingabemenge zeigen. Damit werden jegliche Speicherallokationen vermieden.

Videos by heise

Folgender Code zeigt die Unterschiede von EnumerateSplits() gegenüber Split():

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace NET9_Console.FCL90
{
 class FCL9_RegEx
 {

  public void Run()
  {
   CUI.Demo(nameof(FCL9_RegEx));

   CUI.H2("Split() erwartet String, liefert Strings");
   string URLs = "www.IT-Visions.de\nwww.dotnet9.de\nwww.dotnet-lexikon.de";
   foreach (string s in Regex.Split(URLs, "[.\n]", RegexOptions.Multiline))
   {
    Console.WriteLine($"Teil: {s}");
   }

   CUI.H2("EnumerateSplits() erwartet ReadOnlySpan<char> liefert Range innerhalb Span<T>");
   ReadOnlySpan<char> URlsAsSpan = URLs;
   foreach (Range r in Regex.EnumerateSplits(URlsAsSpan, "[.\n]", RegexOptions.Multiline))
   {
    Console.WriteLine($"Teil: {URlsAsSpan[r]}");
   }
  }
 }
}

Die Ausgaben der beiden Funktionen sind gleich, auch wenn sie unter der Haube anders arbeiten.

(Bild: Screenshot (Holger Schwichtenberg))

Heise-Konferenz: betterCode() .NET 10.0 am 18. November
Online-Konferenz betterCode() 10.0 am 18. November 2025

(Bild: coffeemill/123rf.com)

Das nächste LTS-Release steht an: Auf der Online-Konferenz betterCode() .NET 10.0 am 18. November 2025 – ausgerichtet von iX und dpunkt.verlag in Kooperation mit IT-visions.de – präsentieren der Autor dieses Artikels, Dr. Holger Schwichtenberg, und weitere Experten die wichtigsten Neuerungen. Dazu zählen die Updates im .NET 10.0 SDK sowie in C# 14.0, ASP.NET Core 10.0, Blazor 10.0, Windows Forms 10.0, WPF 10.0, WinUI 3, .NET MAUI 10.0 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen.

Das Programm ist noch nicht veröffentlicht – bis dahin sind vergünstigte Blind-Bird-Tickets bereits im Online-Shop erhältlich. Das Vorjahresprogramm lässt sich im Archiv einsehen.

(rme)