对象初始化程序和动态指定属性

使用对象初始化程序,是否可以选择包含属性设置?

例如:

Request request = new Request { Property1 = something1, if(something) Property2 = someting2, Property3 = something3 }; 

不是我知道的。 很确定你唯一的选择就是这样做:

 Request request = new Request { Property1 = something1, Property3 = something3 }; if(something) request.Property2 = someting2; 

或者你可以像这样做,如果有一个默认值/ null值你可以设置为:

 Request request = new Request { Property1 = something1, Property2 = something ? someting2 : null, Property3 = something3 }; 

否。对象初始化程序被转换为一组哑语句集。

显然,你可以做hacks来实现类似的东西,比如将属性设置为你知道的默认值(例如new Request { Property2 = (something ? something2 : null) } ),但是setter仍然会被调用 -当然,如果Request的实施者决定更改属性的默认值,这将产生意想不到的后果。 所以最好避免这种技巧,并通过以旧的pre-object-initialiser方式编写显式set语句来进行任何条件初始化。

不,因为这些是静态调用,所以无法在运行时根据某些条件删除或添加它们。

您可以有条件地更改值,如下所示:

 Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };