У меня есть код, который работает с объектами ExpandoObject, заполненными вызовами базы данных. Неизменно некоторые значения являются нулевыми Когда я смотрю на объекты как ExpandoObject, я вижу все ключи и значения (включая нули) в базовом словаре. Но если я пытаюсь получить к ним доступ через динамическую ссылку, любой ключ, имеющий соответствующее нулевое значение, не отображается в динамическом представлении объекта. Я получаю ArgumentNullException, когда пытаюсь получить к нему доступ через синтаксис свойства динамической ссылки.
Я знаю, что мог бы обойти эту проблему, работая напрямую с ExpandoObject, добавляя несколько ловушек try, отображая expando в конкретный тип и т. Д., Но такой вид отрицает необходимость иметь этот динамический объект в первом место. Код, который использует объект dyanmic, будет работать нормально, если некоторые свойства имеют нулевые значения. Есть ли более гибкий или лаконичный способ «скрыть» эти динамические свойства с нулевыми значениями?
Вот код, который демонстрирует мою «проблему»
dynamic dynamicRef = new ExpandoObject();
ExpandoObject expandoRef = dynamicRef;
dynamicRef.SimpleProperty = "SomeString";
dynamicRef.NulledProperty = null;
string someString1 = string.Format("{0}", dynamicRef.SimpleProperty);
// My bad; this throws because the value is actually null, not because it isn't
// present. Set a breakppoint and look at the quickwatch on the dynamicRef vs.
// the expandoRef to see why I let myself be led astray. NulledProperty does not
// show up in the Dynamic View of the dynamicRef
string someString2 = string.Format("{0}", dynamicRef.NulledProperty);