c# - C# 中动态对象的赋值是如何工作的?

标签 c#

在 ASP.NET MVC 中,属性 ViewBag 的类型为动态。

Throught the codeViewBag的各种“属性”被分配给:

ViewBag.Message = "Hello world";
ViewBag.Title = "Page title";

这是如何工作的?来自阅读docs我知道 ViewBag 本身可以是任何东西,但是为什么(或如何)将某些内容分配给动态类型的“成员”呢?

以下是ViewBag公共(public)抽象类ControllerBase:IController类中的定义方式:

 [Dynamic]
 public dynamic ViewBag { get; }
 //
 // Summary:
 //     Gets or sets the dictionary for view data.
 //
 // Returns:
 //     The dictionary for the view data.
 public ViewDataDictionary ViewData { get; set; }

只是好奇。

相关问题: Where can I find the official documentation for DynamicViewDataDictionary?

最佳答案

ViewBagExpandoObject或类似的东西。这基本上只是一个美化的字典,其中“属性”是键。

更新:
实际上,它是一个DynamicViewDataDictionary ,ASP.NET MVC 源代码内部的类。该类继承自DynamicObject简单地说,它是 ViewDataDictionary 的包装器,在 ViewBag 围绕 ControllerBaseViewData 属性的情况下。< br/> 正如您在 TryGetMemberTrySetMember 中看到的,调用被委托(delegate)给 ViewData,没有任何逻辑。

关于c# - C# 中动态对象的赋值是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393661/

相关文章:

c# - 是否可以使用 CSS 设计 C# 应用程序

c# - 如何在 ASP.NET Core 中自定义配置绑定(bind)

c# - 如何在 C# 代码中使用 MVC 3 @Html.ActionLink

c# - 为什么不在 finally block 中关闭数据库连接

c# - 从 NUnit 2 升级到 NUnit 3 时出现错误 `Async test method must have non-void return type`

c# - 我如何知道 visual c# 中的 Windows Media Player 控件何时完成播放歌曲?

c# - 如何获得枚举数作为常量?

c# - 如何在 C# 中以编程方式生成按键事件?

c# - 检查 Double 是否为 "NaN"的最短方法

c# - 创建和写入 XML 文件抛出异常 -> 系统内存不足异常?