ビューのデバッグ中に興味深い効果に遭遇しました。シナリオは簡単に再現できます。View
追加したウォッチ ウィンドウにブレークポイントがViewBag.ViewData
あり、値はnull
です。ViewBag
ただし、オブジェクトを追加して展開するだけで、 が表示され、ViewData
ではありませんnull
。また、正常に展開してそのプロパティを確認することもできます。
それがバグなのか、それともこの動作の原因なのか、誰か説明できますか?
編集
ViewBag.ViewData
は実際にnull
。たとえば、ビューにこのコードがある場合:
if (ViewBag.ViewData == null)
{
<span>ViewBag.ViewData is null</span>
}
スパンを表示します。奇妙な点は、ウォッチ ウィンドウで展開してプロパティを表示できることです。
EDIT2
@Darin Dimitrov の回答に応えて - カスタム テスト クラスでこの動作を再現しよRuntimeBinderException
うとしましたが、プライベート プロパティにアクセスしようとすると、次のようになり'SomeClass.SomeProperty' is inaccessible due to its protection level
ます。
public class SomeClass
{
private string SomeProperty;
}
dynamic dynamicObject = new SomeClass();
if (dynamicObject.SomeProperty == null)
{
Console.WriteLine("dynamicObject.SomeProperty is null");
}
この場合、ViewBag.ViewData
View でアクセスしたときに同じ例外が発生するのではないif (ViewBag.ViewData == null)
でしょうか ( の行)。