C# 对象初始值设定项和动态指定属性

C# 对象初始值设定项和动态指定属性,c#,object-initializers,C#,Object Initializers,对于对象初始值设定项,是否可以选择性地包括属性设置 例如: Request request = new Request { Property1 = something1, if(something) Property2 = someting2, Property3 = something3 }; 否。对象初始值设定项被转换为set语句的哑序列 显然,您可以通过黑客来实现类似的功能

对于对象初始值设定项,是否可以选择性地包括属性设置

例如:

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

否。对象初始值设定项被转换为set语句的哑序列


显然,您可以通过黑客来实现类似的功能,比如将属性设置为您知道的默认值(例如,
newrequest{Property2=(something?something2:null)}
),但是setter仍然会被调用——当然,如果请求的实现者决定更改属性的默认值,这将产生意外的后果。所以最好避免这种把戏,通过用旧的预对象初始化器方式编写显式set语句来进行任何条件初始化。

我不知道。非常确定您唯一的选择是这样做:

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
};   

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

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

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