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