У меня есть код, который работает с ExpandoObjects, заполненными вызовами базы данных. Неизменно некоторые значения равны нулю. Когда я смотрю на объекты как на ExpandoObject, я вижу все ключи и значения (включая нули) в базовом словаре. Но если я попытаюсь получить к ним доступ через динамическую ссылку, любой ключ, имеющий соответствующее нулевое значение, не будет отображаться в динамическом представлении объекта. Я получаю исключение ArgumentNullException, когда пытаюсь получить к нему доступ через синтаксис свойств динамической ссылки.
Я знаю, что могу обойти это, работая напрямую с ExpandoObject, добавляя кучу уловок попыток, отображая Expando на конкретный тип и т. Д., Но это в первую очередь противоречит цели наличия этого динамического объекта. Код, использующий динамический объект, работал бы нормально, если бы некоторые свойства имели нулевые значения. Есть ли более изящный или сжатый способ «показать» эти динамические свойства, которые имеют нулевые значения?
Вот код, демонстрирующий мою "проблему"
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);
ExpandoObject
, он вернет его независимо от того,null
или нет. Если его нет, он выдастRuntimeBinderException
. Он не выдастArgumentNullException
, поэтому в вашем коде должна быть какая-то ошибка. Не могли бы вы показать нам код, который выдает? - person svick   schedule 07.03.2012