Neu in .NET 9.0 [17]: Neue Mengenklasse ReadOnlySet<T>

Die neue Klasse ReadOnlySet<T> vervollständigt die Nur-Lese-Mengen in .NET.

vorlesen Druckansicht 2 Kommentare lesen

(Bild: Pincasso/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

.NET 9.0 bietet eine weitere neue Mengenklasse: ReadOnlySet<T>. Wie bei Sets üblich, sind in der Mengenklasse ReadOnlySet<T> keine Duplikate erlaubt. Anders als HashSet<T> können Entwicklerinnen und Entwickler den Inhalt von ReadOnlySet<T> nicht verändern.

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.

Videos by heise

Zur Konstruktion von ReadOnlySet<T> ist eine Menge in Form eines Objekts mit der Schnittstelle ISet<T> erforderlich, also zum Beispiel HashSet<T>:

public void ReadOnlySet()
 {
  CUI.Demo();
 
  CUI.H1("HashSet<T> erlaubt Hinzufügen/Löschen");
 
  HashSet<string> set1 = new()
  {
   "www.IT-Visions.de",
   "www.dotnet7.de",
   "www.dotnet8.de",
   "www.dotnet9.de",
   "www.dotnet9.de",
   "www.dotnettraining.de",
  };
 
  var r = set1.Add("www.dotnet9.de");
  Console.WriteLine(r ? "URL neu" : "URL schon vorhanden");
  set1.Remove("www.dotnet7.de");
 
  foreach (var url in set1)
  {
   Console.WriteLine(url);
  }
 
  CUI.H1("ReadOnlySet<T> erlaubt KEINE Duplikate und kein Hinzufügen/Löschen");
  ReadOnlySet<string> set2 = new(set1);
  //set2[0] = "www.dotnet6.de" // nicht erlaubt!
  //set2.Add("www.dotnet9.de"); // nicht erlaubt!
  //set2.Remove("www.dotnet7.de"); // nicht erlaubt!
  foreach (var url in set2) // 4 Elemente, da Duplikate entfernt
  {
   Console.WriteLine(url);
  }
 }

Die Ausgabe des Codes zeigt die Unterschiede zwischen HashSet<T> und ReadOnlySet<T>

(Bild: Screenshot (Holger Schwichtenberg))

ReadOnlySet<T> vervollständigt die Nur-Lese-Mengen in .NET. Bisher gibt es schon ReadOnlyCollection<T> für alle Mengen, die IList<T> anbieten, und ReadOnlyDictionary<TKey, TValue> für alle Mengen mit IDictionary<TKey, TValue>. ReadOnlySet<T> erlaubt weder Duplikate noch das Hinzufügen, das Ändern oder das Löschen von Elementen.

(rme)