Инициализатор объектов и Динамически определяющие свойства
С инициализатором объекта возможно ли дополнительно включить настройку свойства?
Например:
Request request = new Request
{
Property1 = something1,
if(something)
Property2 = someting2,
Property3 = something3
};
3 ответа
Не то, чтобы я знал. Уверен, ваш единственный вариант - сделать это так:
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
};
Нет. Объектные инициализаторы переводятся в тупую последовательность операторов set.
Очевидно, что вы можете делать хаки для достижения чего-то похожего, например, установить для свойства то, что вы знаете как значение по умолчанию (например, new Request { Property2 = (something ? something2 : null) }
), но установщик все равно будет вызываться - и, конечно, это будет иметь непредвиденные последствия, если разработчик Request решит изменить значение свойства по умолчанию. Поэтому лучше всего избегать такого рода уловок и выполнять любую условную инициализацию, написав явные операторы set старым способом pre-object-initializer.
Нет, поскольку это статические вызовы, они не могут быть удалены или добавлены во время выполнения в зависимости от некоторых условий.
Вы можете изменить значение условно, например так:
Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };