构造函数链接中间变量我有以下重载的构造函数,我正在努力寻找一个好的解决方案。我看不到如何使用构造函数链接的中间赋值。以下内容不起作用,但显示了我想要执行的操作GetUserByName(用户名);intuserId=user==null?null:(int?)user.Id;//调用另一个构造函数this(services,userId);我知道用有效代码编写上面的唯一方法是publicMyThing(IServiceLocatorservices,stringuserName):this(services,services.UserService.GetUserByName(userName)==null?null:(int?)services.UserService.GetUserByName(userName).Id)不仅是这段丑陋的代码,而且还需要两次调用数据库(除非编译器足够聪明,可以工作,我怀疑)。有没有更好的方法来写上面的内容?这个怎么样:publicMyThing(IServiceLocatorservices,stringuserName){Useruser=services.UserService.GetUserByName(userName);诠释?用户ID=用户==空?null:(int?)user.Id;初始化(服务,用户名);}publicMyThing(IServiceLocatorservices,int?userId){Initialize(services,userId);}privatevoidInitialize(IServiceLocatorservices,int?userId){//初始化逻辑}编辑如果我是你,我会使用像这样的工厂方法替换构造函数:privateMyThing(IServiceLocatorservices,int?userId){//blah....}publicstaticCreate(IServiceLocatorservices,int?userId){returnnewMyThing(services,userId);}publicstaticCreate(IServiceLocatorservices,stringuserName){Useruser=services.UserService.GetUserByName(userName);intuserId=user==null?null:(int?)user.Id;返回新的MyThing(服务,用户ID);用法:varmyThing=MyThing.Create(services,123);varmyOtherThing=MyThing.Create(服务,"用户名");用工厂方法替换构造函数(重构g.com)是的,是的,我知道该示例是用Java编写的,但它是解决您的问题的好方法,某些移植到C#确实很有意义。可以使用statichelper方法:以上就是C#学习教程分享的全部内容:构造函数链接中间变量。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——stringuserName):this(services,GetUserId(services,userName)){}privatestaticint?GetUserId(IServiceLocatorservices,stringuserName){用户user=services.UserService.GetUserByName(userName);返回(用户==null)?(int?)null:user.Id;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
