使用对象初始值设定项,是否可以选择包含属性设置?
例如:
Request request = new Request
{
Property1 = something1,
if(something)
Property2 = someting2,
Property3 = something3
};
答案 0 :(得分:4)
不是我知道的。很确定你唯一的选择是这样做:
Request request = new Request
{
Property1 = something1,
Property3 = something3
};
if(something)
request.Property2 = someting2;
或者你可以这样做,如果有一个默认/空值你可以设置为:
Request request = new Request
{
Property1 = something1,
Property2 = something ? someting2 : null,
Property3 = something3
};
答案 1 :(得分:2)
没有。对象初始化器被转换为一组哑语句集。
显然,你可以做黑客来实现类似的东西,比如将属性设置为你知道的默认值(例如new Request { Property2 = (something ? something2 : null) }
),但是setter仍然会被调用 - 当然这将是如果Request的实现者决定更改属性的默认值,则会产生意想不到的后果。所以最好避免这种技巧,并通过以旧的pre-object-initialiser方式编写显式set语句来进行任何条件初始化。
答案 2 :(得分:0)
不,因为这些是静态调用,所以无法在运行时根据某些条件删除或添加它们。
您可以有条件地更改值,如下所示:
Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };