7
votes

Initializer d'objet et spécification de manière dynamique des propriétés

Avec un initialiseur d'objet, est-il possible d'inclure éventuellement la définition de la propriété?

Par exemple: P>

Request request = new Request
{
    Property1 = something1,
    if(something)
        Property2 = someting2,                                      
    Property3 = something3
};


0 commentaires

3 Réponses :


2
votes

non. Les initialiseurs d'objets sont traduits en une séquence muette d'instructions définies.

Évidemment, vous pouvez faire des hacks pour obtenir quelque chose de similaire, comme définir la propriété sur ce que vous connaissez la valeur par défaut (par exemple, nouvelle demande {property2 = (quelque chose? quelque chose2: null)} )} ) , mais le setter va toujours être appelé - et bien sûr, cela aura des conséquences inattendues si l'exécutant de la demande décide de modifier la valeur par défaut de la propriété. Donc, mieux pour éviter ce type d'astuce et effectuer une initialisation conditionnelle en écrivant des énoncés définis explicites dans l'ancienne objet pré-objet-initialiseur.


0 commentaires

4
votes

Pas que je sache. Assurez-vous à peu près que votre seule option est de le faire comme ceci: xxx pré>

ou vous pouvez le faire comme ceci s'il existe une valeur par défaut / null, vous pouvez la définir sur: P>

Request request = new Request
{
    Property1 = something1,
    Property2 = something ? someting2 : null,
    Property3 = something3
};   


0 commentaires

0
votes

Non, car ce sont des appels statiques, ils ne peuvent pas être supprimés ou ajoutés au moment de l'exécution en fonction de certaines conditions.

Vous pouvez modifier la valeur de manière conditionnelle, comme: P>

Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };


0 commentaires