私は、適切な解決策を見つけるのに苦労している、オーバーロードされたコンストラクターに関する次の状況を抱えています。コンストラクター チェーンで中間代入を使用する方法がわかりません。
以下は有効ではありませんが、私がやりたいことを示しています
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)
これは醜いコードであるだけでなく、データベース呼び出しを 2 回行う必要があります (コンパイラがそれを解決できるほど賢い場合を除きますが、私には疑問です)。
上記の書き方で何か良い方法はありませんか?