Инициализатор объекта и Динамически определяющие свойства - PullRequest
6 голосов
/ 10 февраля 2010

С инициализатором объекта возможно ли дополнительно включить настройку свойства?

Например:

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

Ответы [ 3 ]

4 голосов
/ 10 февраля 2010

Не то, чтобы я знал. Уверен, ваш единственный вариант - сделать это так:

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 голосов
/ 10 февраля 2010

Нет. Инициализаторы объектов переводятся в тупую последовательность операторов set.

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

0 голосов
/ 10 февраля 2010

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

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

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