У меня есть следующая ситуация с перегруженными конструкторами, с которой я пытаюсь найти хорошее решение. Я не вижу, как использовать промежуточное присваивание с цепочкой конструктора.
Следующее недействительно, но показывает, что я хочу сделать
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);
}
Единственный способ, которым я знаю, чтобы написать выше в действительном коде, это
public MyThing(IServiceLocator services, string userName)
: this(services,
services.UserService.GetUserByName(userName) == null ?
null : (int?)services.UserService.GetUserByName(userName).Id)
, который является не только уродливым кодом, но также требует вызова базы данных дважды (если только компилятор не достаточно умен, чтобы решить это, в чем я сомневаюсь).
Есть ли лучший способ написать выше?