C#中如何根据条件实现IEmployee的不同构造函数实例化?
问题描述
我有一个Lambda形式的Employee默认构造函数注册代码,运行正常:
this.For<IEmployee>().Use(() => new Employee());
现在希望根据flag的值调用不同的构造函数:当flag为true时调用带参数的Employee构造函数,当flag为false时调用默认构造函数。我尝试了如下写法,但存在语法问题,请求正确的实现方式:
this.For<IEmployee>().Use( if (flag) { () => new Employee("Test"); } else { () => new Employee()); });
正确实现方式
不能直接在方法参数中嵌入if语句块,因为Use方法需要接收一个Func<IEmployee>类型的委托实例。可以通过以下两种方式实现:
方式一:三元表达式(简洁写法)
直接用三元运算符根据flag返回对应的Lambda委托,符合方法参数的语法要求:
this.For<IEmployee>().Use(flag ? () => new Employee("Test") : () => new Employee());
方式二:先定义委托变量(可读性优先)
如果逻辑后续可能扩展,先把工厂逻辑拆分到变量赋值中,代码结构更清晰:
Func<IEmployee> employeeFactory; if (flag) { employeeFactory = () => new Employee("Test"); } else { employeeFactory = () => new Employee(); } this.For<IEmployee>().Use(employeeFactory);
内容的提问来源于stack exchange,提问作者Shakeer Hussain
相关产品推荐
相关产品推荐

