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

时间:2010-02-10 02:48:26

标签: c# object-initializers

使用对象初始值设定项,是否可以选择包含属性设置?

例如:

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

3 个答案:

答案 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 = "" };