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 deFrozenSet
dosToFrozenDictionary()
renvoie l’ensemble en tant qu’instance deFrozenDictionary
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 utiliserAsReadOnly()
généré. D’un autre côté, c’estFrozentSet
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)
#Nouveau #dans #.NET #Ensembles #dobjets #gelés
1709432441