我遇到了以下情况,其中包含重载的构造函数,我正在努力寻找一个好的解决方案。我看不到如何使用带有构造函数链接的中间赋值。
以下内容无效,但显示了我想要做的事情
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)
这不仅是丑陋的代码,而且还需要两次数据库调用(除非编译器足够聪明,我对此表示怀疑)。
有没有更好的方法来编写上述内容?