Методы расширения и динамика не очень хорошо сочетаются. Кроме того, строки «Propertyname» являются бельмом на глазу.

меет смыслНулевой условный оператор, Хорошо объяснил вэтот ответ слишком.

Мне было интересно, можно ли сделать подобную проверку, как это, когда мой объект является объектом динамического / расширения. Позвольте мне показать вам некоторый код:

Учитывая эту иерархию классов

public class ClsLevel1
{
    public ClsLevel2 ClsLevel2 { get; set; }
    public ClsLevel1()
    {
        this.ClsLevel2 = new ClsLevel2(); // You can comment this line to test
    }        
}

public class ClsLevel2
{
    public ClsLevel3 ClsLevel3 { get; set; }
    public ClsLevel2()
    {
        this.ClsLevel3 = new ClsLevel3();
    }       
}

public class ClsLevel3
{
    // No child
    public ClsLevel3()
    {
    }
}

Если я выполняю этот вид цепной проверки нуля, это работает

ClsLevel1 levelRoot = new ClsLevel1();
if (levelRoot?.ClsLevel2?.ClsLevel3 != null)
{
     // will enter here if you DO NOT comment the content of the ClsLevel1 constructor
}
else
{
     // will enter here if you COMMENT the content of the ClsLevel1 
}

Теперь я попытаюсь воспроизвести это поведение с помощью динамики (ExpandoObjects).

dynamic dinRoot = new ExpandoObject();
dynamic DinLevel1 = new ExpandoObject();
dynamic DinLevel2 = new ExpandoObject();
dynamic DinLevel3 = new ExpandoObject();

dinRoot.DinLevel1 = DinLevel1;
dinRoot.DinLevel1.DinLevel2 = DinLevel2;
//dinRoot.DinLevel1.DinLevel2.DinLevel3 = DinLevel3; // You can comment this line to test

if (dinRoot?.DinLevel1?.DinLevel2?.DinLevel3 != null)
{
     // Obviously it will raise an exception because the DinLevel3 does not exists, it is commented right now.
}

Есть ли способ симулировать это поведение с динамикой? Я имею в виду, проверить на ноль в длинной цепочке членов?

Ответы на вопрос(2)

Ваш ответ на вопрос