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

7

使用对象初始化器,是否可以选择性地设置属性?

例如:

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

4
我不知道有没有其他方法。相信你唯一的选择就是按如下方式进行操作:
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
};   

2

不,对象初始化程序被转换为一系列简单的设置语句。

显然,您可以通过一些技巧来实现类似的效果,例如将属性设置为您知道默认值是什么(例如new Request { Property2 = (something ? something2 : null) }),但是setter仍将被调用--当然,如果Request的实现者决定更改属性的默认值,这将产生意想不到的后果。因此最好避免这种技巧,通过以旧的预对象初始化程序方式编写明确的设置语句来进行任何条件初始化。


0
不,由于这些是静态调用,它们无法根据某些条件在运行时被删除或添加。
你可以有条件地改变值,像这样:
Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接