gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:24:40 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com