Neu in .NET 9.0 [18]: Ergänzungen für SearchValues und PriorityQueue

Die Klasse SearchValues erhält eine weitere Überladung, und in PriorityQueue kann man nun Elemente an beliebiger Stelle aus einer Warteschlange entnehmen.

vorlesen Druckansicht 1 Kommentar lesen

(Bild: Pincasso/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die bereits in .NET 8.0 eingeführte Klasse System.Buffers.SearchValues besitzt nun bei der Methode Create() eine weitere Überladung, um nicht nur einzelne Zeichen, sondern ganze Zeichenketten schnell in einer anderen Zeichenkette zu suchen:

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.

// In .NET 8.0 möglich
SearchValues<char> digits = SearchValues.Create("0123456789");
string text1 = "Hinweis: Der Buchstabe A hat in der ASCII-Tabelle den Wert 97.";
var positionDerErstenZiffer = text1.AsSpan().IndexOfAny(digits);
Console.WriteLine(positionDerErstenZiffer); // 59
 
// Ab .NET 9.0 möglich
SearchValues<string> artikel =
SearchValues.Create(["der", "die", "das"], StringComparison.OrdinalIgnoreCase);
string text2 = "Hinweis: Der Buchstabe A hat in der ASCII-Tabelle den Wert 97.";
var positionDesErstenArtikels = text2.AsSpan().IndexOfAny(artikel);
Console.WriteLine(positionDesErstenArtikels); // 9

Videos by heise

Die PriorityQueue-Klasse, die bereits in .NET 6.0 eingeführt wurde, verfügt nun über eine Remove()-Methode, mit der Elemente entfernt werden können, auch wenn sie nicht an der Reihe sind. Remove() erweitert als Parameter das zu entfernende Element.

Remove() liefert drei Werte zurück: als Rückgabewert einen Boolean-Wert, der anzeigt, ob das Element vorhanden war und entfernt werden konnte. Im zweiten und dritten Methodenparameter kommt via out das entfernte Element zurück sowie seine Priorität.

Folgender Code zeigt den Einsatz der Methode Remove in der Klasse PriorityQueue:

public void PriorityQueueRemove()
{
 CUI.Demo();
 
 CUI.H2("PriorityQueue erstellen");
 var q = new PriorityQueue<string, int>();
 q.Enqueue("www.dotnet-doktor.de", 20);
 q.Enqueue("www.dotnet7.de", 2);
 q.Enqueue("www.IT-Visions.de", 10);
 q.Enqueue("www.dotnet-lexikon.de", 30);
 q.Enqueue("www.dotnet8.de", 3);
 q.Enqueue("www.dotnet9.de", 1);
 
 Console.WriteLine($"Elemente in der PriorityQueue: {q.Count}"); // 0
 
 CUI.H2("Entferne vorhandenes Element aus der PriorityQueue mit Remove()");
 bool b1 = q.Remove("www.dotnet7.de", out string e1, out int priority1); // .NET 7.0 raus, da Out of Support!!! 
 if (b1) Console.WriteLine($"Element {e1} mit Priorität {priority1} wurde entfernt!");
 else Console.WriteLine("Element nicht gefunden");
 Console.WriteLine($"Elemente in der PriorityQueue: {q.Count}"); // 0
 
 CUI.H2("Versuch, nicht vorhandenes Element aus der PriorityQueue zu entfernen mit Remove()");
 bool b2 = q.Remove("www.dotnet7.de", out string e2, out int priority2);
 if (b2) Console.WriteLine($"Element {e2} mit Priorität {priority2} wurde entfernt!");
 else Console.WriteLine("Element nicht gefunden");
 
 CUI.H2($"Alle Elemente {q.Count} aus der Warteschlange holen mit Dequeue()"); // 5
 var count = q.Count;
 for (int i = 0; i < count; i++)
 {
  var current = q.Dequeue();
  Console.WriteLine(i + ": " + current);
 }
 
 Console.WriteLine($"Verbliebene Elemente in der PriorityQueue: {q.Count}"); // 0
}

Der Screenshot zeigt die Ausgabe des Codebeispiels.

(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: Die Online-Konferenz betterCode() .NET 10.0 am 18. November 2025 – ausgerichtet von iX und dpunkt.verlag in Kooperation mit IT-visions.de – präsentiert 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)