C# Language Utilisation de l'initialiseur de collection à l'intérieur de l'initialiseur d'objet


Exemple

public class Tag
{
    public IList<string> Synonyms { get; set; }
}

Synonyms sont une propriété de type collection. Lorsque l'objet Tag est créé à l'aide de la syntaxe d'initialisation d'objet, les Synonyms peuvent également être initialisés avec la syntaxe d'initialisation de collection:

Tag t = new Tag 
{
    Synonyms = new List<string> {"c#", "c-sharp"}
};

La propriété de collection peut être en lecture seule et prendre en charge la syntaxe d'initialisation de collection. Considérez cet exemple modifié (la propriété Synonyms a maintenant un setter privé):

public class Tag
{
    public Tag()
    {
        Synonyms = new List<string>();
    }
    
    public IList<string> Synonyms { get; private set; }
}

Un nouvel objet Tag peut être créé comme ceci:

Tag t = new Tag 
{
    Synonyms = {"c#", "c-sharp"}
};

Cela fonctionne parce que les initialiseurs de collection ne sont que du sucre syntatique sur les appels à Add() . Il n'y a pas de nouvelle liste créée ici, le compilateur génère simplement des appels à Add() sur l'objet existant.