J'ai la configuration suivante avec des constructeurs surchargés que j'ai du mal à trouver une bonne solution. Je ne vois pas comment utiliser une affectation intermédiaire avec un chaînage de constructeur.Construire le chaînage avec des variables intermédiaires
Ce qui suit est pas valide, mais montre ce que je veux faire
public MyThing(IServiceLocator services, int? userId)
{
// blah....
}
public MyThing(IServiceLocator services, string userName)
{
User user = services.UserService.GetUserByName(userName);
int userId = user == null ? null : (int?)user.Id;
// call the other constructor
this(services, userId);
}
La seule façon que je sais écrire ce qui précède dans le code valide est
public MyThing(IServiceLocator services, string userName)
: this(services,
services.UserService.GetUserByName(userName) == null ?
null : (int?)services.UserService.GetUserByName(userName).Id)
qui est non seulement le code laid , mais nécessite également l'appel à la base de données deux fois (à moins que le compilateur soit assez intelligent pour travailler sur ce que je doute).
Existe-t-il une meilleure façon d'écrire ce qui précède?
Si ça fait mal, ne le faites pas :-) – VVS