Nouvelles Du Monde

Nouveau dans .NET 8.0 [12]: Ensembles d’objets gelés

Nouveau dans .NET 8.0 [12]: Ensembles d’objets gelés

2024-03-01 11:22:00

.NET 8.0 propose deux nouveaux ensembles d’objets FrozenSet et FrozenDictionary dans le nouvel espace de noms System.Collections.Frozen. Avec ces quantités gelées, vous ne pouvez pas modifier, ajouter ou supprimer des éléments après la création. Pour ce faire, ils fournissent les éléments contenus plus rapidement que les autres ensembles d’objets disponibles dans .NET.

Publicité


Dr. Holger Schwichtenberg est le directeur technique du réseau d’experts www.IT-Visions.de qui, avec 53 experts renommés, soutient de nombreuses moyennes et grandes entreprises par le biais de conseils et de formations ainsi que de développement de logiciels. Grâce à ses participations à de nombreuses conférences nationales et internationales ainsi qu’à plus de 90 ouvrages spécialisés et plus de 1 500 articles spécialisés, Holger Schwichtenberg est l’un des experts les plus connus en Allemagne dans le domaine des technologies .NET et Web.

Vous pouvez créer un ensemble gelé à l’aide de deux nouvelles méthodes d’extension pour l’interface IEnumerable:

  • ToFrozenSet() renvoie l’ensemble en tant qu’instance de FrozenSet dos
  • ToFrozenDictionary() renvoie l’ensemble en tant qu’instance de FrozenDictionary dos.

Ces méthodes créent une liste ou un dictionnaire « gelé » (avec des paires nom-valeur).

Il existe trois différences entre le .NET Framework 2.0, disponible depuis 2005 ReadOnlyCollection et celui maintenant introduit dans .NET 8.0 FrozenSet:

  • Implémentations de ReadOnlyCollection représentez simplement la vue d’un autre ensemble que vous pouvez utiliser AsReadOnly() généré. D’un autre côté, c’est FrozentSet un ensemble indépendant.
  • FrozenSet n’a pas d’indexeur : frozenSet× donc ça ne marche pas.
  • FrozentSet ne peut pas contenir de doublons car les ensembles n’autorisent pas les doublons

Le code suivant montre l’utilisation de FrozenSet par rapport à d’autres ensembles d’objets :

/// 
 /// Klasse System.Collections.Frozen.FrozenSet: 
 /// Eine nur lesbare einfache Liste. 
 /// Duplikate warden automatisch entfernt!
 /// 
 public void FrozenSet()
 {
  CUI.H2(nameof(FrozenSet));
 
  CUI.H3("FrozenSet aus Array");
  int[] Zahlen = new int[] { 1, 2, 3 };
  var f = Zahlen.ToFrozenSet();
  Console.WriteLine(f.GetType().FullName);
 
  CUI.H3("FrozenSet aus List");
  List list = new List { 42, 10, 50, 42 };
  FrozenSet frozenSet = list.ToFrozenSet();
  Console.WriteLine(frozenSet.GetType().FullName);
  Console.WriteLine(frozenSet.Count); // nur 3, da keine Duplikate!
 
  #region -------------------  
  // Änderung -->  FrozenSet hat keinen Indexer, 
  // kein Add(), kein Remove()
  //frozenSet[2] = 10; // Ändern nicht möglich
  //frozenSet.Add(42); // Hinzufügen nicht möglich!!
  //frozenSet.Remove(42); // Hinzufügen nicht möglich!!
  #endregion
 
  CUI.H3("ReadOnlyCollection aus List"); 
  // gab es schon vor .NET 8.0 :-) --> 
  // ReadOnlyCollection ist nur Sicht auf eine andere Menge, 
  // die man mit AsReadOnly() erzeugt.
  ReadOnlyCollection readonlyList = list.AsReadOnly();
  Console.WriteLine(readonlyList.GetType().FullName);
  //readonlyList[2] = 10; // Ändern nicht möglich
  //readonlyList.Add(42); // Hinzufügen nicht möglich!!
 
  CUI.H3("ImmutableList aus List"); // gab es schon vor .NET 8.0 :-)
  ImmutableList immutableList = list.ToImmutableList();
  Console.WriteLine(immutableList.GetType().FullName);
  //immutableList[2] = 10; // Ändern nicht möglich
  var newImmutableList = immutableList.Add(42);
  // Hinzufügen IST möglich, aber man bekommt eine neue Liste!
 
  #region ------------------- Änderungen in Ursprungsliste
  CUI.H3("Ein Element ändern");
  list[2] += 1; // drittes Element der Ursprungsliste ändern
  Console.WriteLine(list[2]); // 51
  Console.WriteLine(readonlyList[2]); // 51
  Console.WriteLine(immutableList.ElementAt(2)); // ist immer noch 50!
  Console.WriteLine(frozenSet.ElementAt(2)); // ist immer noch 50!
  #endregion
 
  #region ------------------- Elemente hinzufügen in Ursprungsliste
  CUI.H3("Ein Element hinzufügen");
  list.Add(77); // Ein fünftes Element ergänzen
  Console.WriteLine($"List count: {list.Count}"); // == 5!
  // == 5 weil: ReadOnlyList ist eine Sicht auf List!:
  Console.WriteLine($"ReadOnlyList count: {readonlyList.Count}"); 
  // == 4 weil vorheriger Zustand der Liste: 
  Console.WriteLine($"ImmutableList count: {immutableList.Count}");  
  // == 5 neue Liste: 
  Console.WriteLine($"new ImmutableList count: {newImmutableList.Count}");  
  // == 3 FrozenSET: vorheriger Zustand, keine Duplikate: 
  Console.WriteLine($"FrozenSet count: {frozenSet.Count}"); 
  #endregion
 }

L’utilisation de FrozenDictionary affiche l’extrait de code suivant :

public void FrozenDic()
 {
  CUI.H2(nameof(FrozenDic));
  List list = new List { 42, 10, 50, 42 };
 
  CUI.H3("FrozenDictionary aus List");
  FrozenDictionary frozenDic = 
    list.Distinct().ToFrozenDictionary(x => x, 
                                       x => "Zahl " + x.ToString());
  Console.WriteLine(frozenDic.Count); // 3
  // frozenDic[0] = 2;
  // frozenDic.TryAdd(0, "Zahl 0"); // "Not supported"
 
  Console.WriteLine(frozenDic.GetType().FullName);
 }
}


(moi)

Vers la page d’accueil



#Nouveau #dans #.NET #Ensembles #dobjets #gelés
1709432441

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Un F16 s’est écrasé à Halkidiki, le pilote est sain et sauf

F-16 ©Eurokinissi ” )+(“arrêter\”> “).length); //déboguer contenttts2=document.querySelector(“.entry-content.single-post-content”).innerHTML.substring( 0, document.querySelector(“.entry-content.single-post-content “).innerHTML.indexOf( “” )); contenttts2=contenttts2.substring(contenttts2.indexOf( “fa-stop\”> ” )+(“arrêter\”> “).length);

ADVERTISEMENT