Как мои ViewData могут быть нулевыми, но могут быть расширены в отладчике?

Только что наткнулся на интересный эффект при отладке представления. Сценарий легко воспроизвести - у меня есть точка останова в View , в окне Watch я добавляю ViewBag.ViewData , а значение равно null . Однако, если я просто добавлю ViewBag и разверну объект, я увижу ViewData , а это не null . Я также могу успешно развернуть его и увидеть его свойства.

Может ли кто-нибудь объяснить, является ли это ошибкой или что вызывает такое поведение?

ViewBag.ViewData in Watch window

РЕДАКТИРОВАТЬ

ViewBag.ViewData фактически null . Например, если у меня есть этот код в представлении:

if (ViewBag.ViewData == null)
{
    <span>ViewBag.ViewData is null</span>
}

, он отображает диапазон. Странно то, что я могу развернуть его в окне просмотра и увидеть свойства.

EDIT2

В ответ на @Darin Dimitrov ' s ответ - я попытался воспроизвести это поведение с помощью специального тестового класса и получил RuntimeBinderException при попытке доступа к закрытому свойству: SomeClass.SomeProperty недоступен из-за уровня защиты ]:

public class SomeClass
{
    private string SomeProperty;
}

dynamic dynamicObject = new SomeClass();
if (dynamicObject.SomeProperty == null)
{
    Console.WriteLine("dynamicObject.SomeProperty is null");
}

В этом случае я не должен получать такое же исключение при доступе к ViewBag.ViewData в представлении (строка с if (ViewBag.ViewData == null) )?

7
задан Anthony Mastrean 18 March 2013 в 15:30
поделиться