在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
时它不会发生.有什么区别?
最佳答案
据我所知,ViewBag
是 ViewData
的动态包装器。 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/