Nouvelles Du Monde

Nouveau dans .NET 8.0 [4]: Expressions de collection en C# 12.0

Nouveau dans .NET 8.0 [4]: Expressions de collection en C# 12.0

2024-01-05 12:00:00

Une très belle innovation de C# 12.0 est la syntaxe simplifiée pour l’initialisation des ensembles. Microsoft appelait à l’origine cette fonctionnalité du langage Collection Literals, mais maintenant appelée Collection Expressions.

Publicité


Dr. Holger Schwichtenberg est expert technologique en chef chez MAXIMAGO, qui propose un développement de logiciels innovant et basé sur l’expérience, y compris dans des domaines hautement critiques liés à la sécurité. Il est également à la tête du réseau d’experts www.IT-Visions.de, qui soutient de nombreuses moyennes et grandes entreprises avec des conseils et des formations dans le développement et l’exploitation de logiciels avec 43 experts renommés.

Avec cette nouvelle syntaxe, vous pouvez grandement unifier les formes d’initialisation auparavant très hétérogènes des ensembles d’objets à la manière de JavaScript, c’est-à-dire avec les valeurs entre crochets, séparées par des virgules :

Initialisation précédente

Maintenant aussi possible

int[] a = nouvel entier[3] { 1, 2, 3 } ;

int[] une = [1,2,3];

Portée b = allocation de pile[] { 1, 2, 3 } ;

Portée b = [1,2,3];

Tableau immuable c = ImmutableArray.Create(1, 2, 3);

Tableau immuable c = [1,2,3];

Liste d = nouveau() { 1, 2, 3 } ;

Liste ré = [1,2,3];

De l’Illinois e = nouvelle liste() { 1, 2, 3 } ;

De l’Illinois e = [1, 2, 3];

IEnumerable f = nouvelle liste() { 1, 2, 3 } ;

IEnumerable f = [1,2,3];

Cependant, un objet de type ReadOnlyArray est créé!

La syntaxe avec crochets est possible non seulement lors de l’initialisation initiale, mais également lors d’affectations ultérieures :

List sites1, sites2 = ["www.IT-Visions.de"], sites3;
sites1 = ["www.dotnetframework.de", "www.dotnet8.de", 
          "dotnet-lexikon.de", "www.dotnet-doktor.de"];
sites3 = []; // leere Liste

Utilisation de l’opérateur spread .. Vous pouvez intégrer des ensembles dans d’autres ensembles dans le cadre de l’initialisation. L’opérateur spread garantit qu’une liste plate n’est pas imbriquée :

// Array aus den Elementen der Arrays erstellen mit Spread Operator
string[] allSitesAsArray = 
  [.. sites1, .. sites2, "www.dotnettraining.de", .. sites3];
// Liste aus den Elementen der Arrays erstellen mit Spread Operator
List allSitesAsList = 
  [.. sites1, .. sites2, "www.dotnettraining.de", .. sites3];

// Liste noch mal erweitern
allSitesAsList = [.. allSitesAsList, "powershell-schulungen.de"];

// Auflisten: 7 Sites sind nun in der Liste
foreach (var site in allSitesAsList)
{
 Console.WriteLine(site);
}

Beaucoup de choses sont créées avec ces huit sites Web, car en plus des sept dans les variables sites1, sites2 et sites3 Un autre site Web a été ajouté aux sites Web inclus.



Sortie du listing précédent

(Image : Capture d’écran / Holger Schwichtenberg)

Les expressions de collection ne sont actuellement pas possibles pour les objets de dictionnaire (à partir de C# 12.0). Avec ceux-ci, vous pouvez (comme avant C# 12.0) soit utiliser l’initialisation à l’aide d’accolades imbriquées, soit utiliser l’affectation nom-valeur entre les accolades via [Name] = Wert complet:

  // Initialisierung mit Add()
  SortedDictionary dic0 = new();
  dic0.Add(10, "www.dotnet-doktor.de");
  dic0.Add(21, "www.dotnetframework.de");
  dic0.Add(42, "www.dotnet8.de");

  // Initialisierung mit geschweiften Klammern
  SortedDictionary dic1 = new() {
   { 10, "www.dotnet-doktor.de" }, 
   { 21, "www.dotnetframework.de" },  
   { 42, "www.dotnet8.de" } 
  };

  // Initialisierung mit geschweiften und eckigen Klammern
  // (schon vor C# 12.0 möglich)
  SortedDictionary dic2 = new()
  {
   [10] = "www.dotnet-doktor.de",
   [21] = "www.dotnetframework.de",
   [42] = "www.dotnet8.de"
  };


(moi)

Vers la page d’accueil



#Nouveau #dans #.NET #Expressions #collection
1704515317

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

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

ADVERTISEMENT