Объектный Инициализатор и Динамично определение свойств

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

Например:

Request request = new Request
{
    Property1 = something1,
    if(something)
        Property2 = someting2,                                      
    Property3 = something3
};
6
задан Alconja 10 February 2010 в 02:53
поделиться

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
};   
4
ответ дан 17 December 2019 в 02:28
поделиться

Мы использовали сконы на относительно крупном проекте, чтобы заменить производство, и обнаружили, что это была достаточно гибкая система, которая позволила нам сделать некоторые очень необходимые (но очень неудачные) взломы, чтобы заставить вещи построить путь нам нужно. Кроме того, make является -strange-.

-121--3064115-

Прочитайте раздел «Делегирование учетных данных» Здесь - кредит Киту Хиллу и выполните шаги, если вы еще не сделали этого.

-121--1501722-

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

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

2
ответ дан 17 December 2019 в 02:28
поделиться

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

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

Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };
0
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: