提问人:Shakeer Hussain 提问时间:11/14/2023 最后编辑:Theodor ZouliasShakeer Hussain 更新时间:11/14/2023 访问量:52
如何用C语言编写条件实例化#
How to write conditional instantiation in C#
问:
我有一个下面的 lambda 默认构造函数,它工作正常。Employee
this.For<IEmployee>().Use(() => new Employee());
现在,我想根据值将另一个构造器称为另一个构造器。
If 是带参数的调用构造函数。
如果为 ,则调用默认构造函数。flag
flag
true
Employee
flag
false
this.For<IEmployee>().Use(
if (flag)
{
() => new Employee("Test");
}
else
{
() => new Employee());
});
答:
4赞
Dmitry
11/14/2023
#1
this.For<IEmployee>().Use(() => flag ? new Employee("Test") : new Employee());
评论
0赞
Shakeer Hussain
11/14/2023
谢谢,我尝试了上面的方法,但它抛出了这个错误“ 无法将 lambda 表达式转换为类型”string“,因为它不是委托类型。
0赞
Olivier Jacot-Descombes
11/14/2023
@ShakeerHussain,如果您的原始表达式与 lambda 表达式一起使用,那么这个具有相同签名 () 的新 lambda 表达式也将有效。Use
Func<Employee>
0赞
David
11/14/2023
#2
看起来你只是把语法/结构弄混了。lambda 的这一部分:
() =>
是函数标头。它之后的一切都是函数体。你正试图围绕它来包裹你的结构。这在概念上类似于: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());
}
});
(可以重构为更紧凑的内容,但出于说明目的,请留在这里。
评论