c# - 为什么 ViewBag.SomeProperty 在属性不存在时不抛出异常?

标签 c# asp.net-mvc dynamic

MVC ,有时我正在设置 ViewBag 的特定属性根据某些条件。例如:

if(someCondition)
{
   // do some work
   ViewBag.SomeProperty = values;
}

return View();

在我的 View我正在检查该属性是否为 null,如下所示:

@if(ViewBag.SomeProperty != null)
{
   ...
}

直到现在,我一直在想应该抛出一个异常,因为如果我的条件不满足,那么 SomeProperty永远不会设置。这就是为什么我总是使用 else将该属性设置为 null 的语句.但我刚刚注意到,它不会抛出异常,即使该属性不存在也是如此。例如在Console Application 中如果我执行以下操作,我会得到一个 RuntimeBinderException :

dynamic dynamicVariable = new {Name = "Foo"};

if(dynamicVariable.Surname != null) Console.WriteLine(dynamicVariable.Surname);

但是当涉及到 ViewBag 时它不会发生.有什么区别

最佳答案

据我所知,ViewBagViewData 的动态包装器。 ViewData 本身检索值如下:

public object this[string key]
{
    get
    {
        object value;
        _innerDictionary.TryGetValue(key, out value);
        return value;
    }
    set { _innerDictionary[key] = value; }
}

因此,如果键不存在,它会返回类型的默认值并且不会抛出异常。

关于c# - 为什么 ViewBag.SomeProperty 在属性不存在时不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22799972/

相关文章:

java - 生成带坐标系的六边形网格的算法

c# - 使用C#编辑Xml文件

c# 将数据从数据表传递到另一种形式

c# - 第一个程序的规划和开发步骤

c# - Winforms——多选下拉列表

c# - MVC4 捆绑(基于设备类型)

jquery - Json结果问题

Java常量通过构建字符串进行实例化

c# - 在 asp.net mvc Twitter OAuth2 登录后获取 oauth 凭据

JavaFX:获取动态创建的按钮的ID