Affectation conditionnelle d’initialiseur C #

Dans ac initializer, je ne veux pas définir de propriété si une condition est fausse.

Quelque chose comme ça:

ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, if (!windowsAuthentication) { Login = user, Password = password } }; 

Ça peut être fait? Comment?

Tu ne peux pas faire ça; Les initialiseurs C # sont une liste de paires nom = valeur. Voir ici pour plus de détails: http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic5

Vous devrez déplacer le bloc if à la ligne suivante.

Ceci n’est pas possible dans un initialiseur; vous devez faire une déclaration if distincte.

Alternativement, vous pourrez peut-être écrire

 ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, Login = windowsAuthentication ? null : user, Password = windowsAuthentication ? null : password }; 

(Selon le fonctionnement de votre classe ServerConnection )

Je suppose que cela fonctionnerait, mais l’utilisation de la logique de cette façon annule en quelque sorte le but de l’initialisation.

 ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, Login = windowsAuthentication ? null : user, Password = windowsAuthentication ? null :password }; 

Remarque: je ne recommande pas cette approche, mais si cela doit être fait dans un initialiseur (c’est-à-dire que vous utilisez LINQ ou un autre endroit où il doit s’agir d’une seule déclaration), vous pouvez utiliser ceci:

 ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, Login = windowsAuthentication ? null : user, Password = windowsAuthentication ? null : password, } 

Comme d’autres l’ont mentionné, cela ne peut pas être fait avec un initialiseur. Est-il acceptable d’assigner simplement null à la propriété au lieu de ne pas la définir du tout? Si tel est le cas, vous pouvez utiliser l’approche indiquée par d’autres. Voici une alternative qui accomplit ce que vous voulez et utilise toujours la syntaxe d’initialisation:

 ServerConnection serverConnection; if (!windowsAuthentication) { serverConection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, Login = user, Password = password }; } else { serverConection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, }; } 

À mon avis, cela ne devrait pas vraiment avoir beaucoup d’importance. À moins que vous n’utilisiez des types anonymes, la syntaxe d’initialisation est une fonctionnalité intéressante qui peut rendre votre code plus soigné dans certains cas. Je dirais, ne vous en privez pas pour initialiser toutes vos propriétés si cela sacrifie la lisibilité. Il n’y a rien de mal à faire le code suivant à la place:

 ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, }; if (!windowsAuthentication) { serverConnection.Login = user, serverConnection.Password = password } 

Que dis-tu de ça:

 ServerConnection serverConnection = new ServerConnection(); serverConnection.ServerInstance = server; serverConnection.LoginSecure = windowsAuthentication; if (!windowsAuthentication) { serverConnection.Login = user; serverConnection.Password = password; }