使用工厂方法后能否通过大括号语法直接为返回对象填充属性
解决方案
你需要的功能是C#原生支持的对象初始值设定项语法,不需要修改现有Create方法的实现,直接调整调用写法即可生效:
正确调用写法
var tempNewObject = MDBShorterManager.Create<TblUser>() { variable1 = "content1", variable2 = "content2" };
该语法由编译器自动生成等价的逐行属性赋值代码,和你当前手动写的多行赋值逻辑完全等效,无额外性能开销。
可选增强方案
如果需要支持更复杂的初始化逻辑(比如条件赋值、多步操作),可以给Create方法增加可选的初始化委托参数:
修改后的Create方法
public T Create<T>(Action<T> initAction = null) where T : MDBShorter { try { var tempObject = (T)Activator.CreateInstance(typeof(T)); tempObject.mdbShorterManager = this; // 执行自定义初始化逻辑 initAction?.Invoke(tempObject); try { actionInjectDataToMDBShorter?.Invoke(tempObject); } catch(Exception ex) { ErrorLog.cw(ex.Message); } return tempObject; } catch (Exception ex) { ErrorLog.cw(ex.Message); return null; } }
对应调用写法
var tempNewObject = MDBShorterManager.Create<TblUser>(u => { u.variable1 = "content1"; u.variable2 = DateTime.Now.Year > 2024 ? "新内容" : "旧内容"; // 可写任意自定义初始化逻辑 });
内容的提问来源于stack exchange,提问作者Michiel
相关产品推荐
相关产品推荐

