Le code suivant compile, mais échoue avec un NullReferenceException
:C# dictionnaire initialiseur compilation inconsistance
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
Si vous remplacez la ligne marquée 'échoue' avec ce qui suit, il fonctionne (comme prévu):
Dictionary = new Dictionary<string, string>
La syntaxe défaillante peut-elle être utilisée - peut-elle être utilisée avec succès dans un autre cas? Ou est-ce un oubli dans le compilateur?
Alors il est utilisé pour ajouter des éléments à un dictionnaire créé par le constructeur - j'aurais dû m'en rendre compte. Mais c'est une utilisation étrange de l'opérateur égal, puisque l'effet est d'ajouter à ce qui est déjà dans le dictionnaire (le constructeur peut avoir ajouté des éléments en premier). –
Sorte de, oui ... mais en même temps, il est utilisé pour définir les valeurs initiales dans la collection, de sorte qu'il s'intègre de cette façon. –
Droite. Le 'new' manquant aurait dû être un drapeau rouge .. mais n'ayant jamais utilisé cette syntaxe, j'ai pris l'opérateur égal à la lettre. –