2010-02-10 2 views

ответ

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

No. инициализаторы объектов переводятся в немую последовательность набора утверждений.

Очевидно, что вы можете делать взломы, чтобы достичь чего-то подобного, например, установить свойство для того, что вам известно по умолчанию (например, new Request { Property2 = (something ? something2 : null) }), но сеттер по-прежнему будет вызван - и, конечно, это будет иметь непреднамеренные последствия если разработчик Request решает изменить значение по умолчанию для свойства. Поэтому лучше всего избегать такого трюка и выполнять условную инициализацию путем написания явных заданий в старом пред-объекте-инициализаторе.

0

Нет, так как те, это статические вызовы, которые они не могут удалить или добавить во время выполнения на основе некоторых условий.

Вы можете изменить значение условно, так как:

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