8
votes

Pourquoi l'initialisation ne fonctionne-t-elle pas avec les propriétés de retour de la liste des propriétés ?

Impossible de trouver une réponse à cette question. Il doit être évident, mais toujours.

J'essaie d'utiliser Initializer dans cet exemple simplifié: xxx

où les enfants sont une propriété pour cette classe, qui renvoie une liste. Et ici, je rencontre une erreur, ce qui va comme «déclarateur membre d'initialisateur non valide».

Qu'est-ce qui ne va pas ici et comment initiez-vous de telles propriétés? Merci beaucoup à l'avance!


1 commentaires

Cela n'initialise pas une propriété. Vous appelez une méthode.


6 Réponses :


2
votes

Parce que vous exécutez une méthode, ne pas attribuer une valeur


0 commentaires

2
votes

La syntaxe d'initialisateur de champ ne peut être utilisée que pour régler les champs et les propriétés, pas pour les méthodes d'appel. Si enfants code> est list code>, vous pourrez peut-être y accomplir de cette façon, en incluant également la syntaxe d'initialisateur de liste:

T myT = /* smth */

MyNode newNode = new MyNode 
{
    NodeName = "newNode",
    Children = new List<T> { myT }
};


0 commentaires

2
votes

Les éléments suivants ne définissent pas une valeur dans l'initialiseur:

Children.Add(/*smth*/) // mistake is here


0 commentaires

4
votes

C'est parce que la propriété des enfants n'est pas initialisée xxx


0 commentaires

23
votes

Vous ne pouvez pas appeler des méthodes comme celle des initialisateurs d'objets - vous ne pouvez définir que des propriétés ou des champs plutôt que des méthodes d'appel. Cependant, dans ce cas, vous avez probablement peut utiliser la syntaxe d'initialisateur d'objet et de collecte: xxx

Notez que cela n'essaiera pas d'attribuer une nouvelle valeur à Enfants , il appellera enfants.add (...) , comme celui-ci: xxx


0 commentaires

2
votes

initialiseurs est juste d'initialiser les propriétés, pas d'autres actions.

Vous n'essayez pas d'initialiser la liste des enfants, vous essayez d'ajouter quelque chose.

enfants = nouvelle liste () l'initialise.


0 commentaires