如何用C#编写条件实例化

问题描述 投票:0回答:2

我有一个低于 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());
});
c# lambda default-constructor
2个回答
4
投票
this.For<IEmployee>().Use(() => flag ? new Employee("Test") : new Employee());

0
投票

看起来你只是把语法/结构搞混了。 lambda 的这一部分:

() => 

函数头。它后面的所有内容都是函数body。你正试图围绕它构建你的

if
结构。从概念上讲,这类似于:

if (someCondition)
{
    public Employee SomeFunc() { return new Employee("Test"); }
}
else
{
    public Employee SomeFunc() { return new Employee(); }
}

如您所见,这不是构建代码的方法。相反,将逻辑移至函数体的。例如:

this.For<IEmployee>().Use(() => {
    if (flag)
    {
        return new Employee("Test");
    }
    else
    {
        return new Employee());
    }
});

(可以重构为更紧凑的东西,但出于说明目的而留在这里。)

© www.soinside.com 2019 - 2024. All rights reserved.