当前位置: 首页 > 知识库问答 >
问题:

如何在C#中创建自己的动态类型或动态对象?

卢黎明
2023-03-14

例如,ControllerBase类的ViewBag属性,我们可以动态地获取/设置值,并向该对象添加任意数量的附加字段或属性,这很酷。我想在其他类型的应用程序中使用类似的东西,除了MVC应用程序和Controller类之外。当我试图创建动态对象并设置它的属性时,如下所示:

1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);

我有runtimeBinderException,带有message属性或索引器'<>f__anonymoustype0.a'不能赋值--它在第2行中是只读的。我也认为这不是我想要的。也许有什么课可以让我做一些类似的事情:

??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;

共有1个答案

佴英奕
2023-03-14
dynamic MyDynamic = new System.Dynamic.ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.Number = 12;
MyDynamic.MyMethod = new Func<int>(() => 
{ 
    return 55; 
});
Console.WriteLine(MyDynamic.MyMethod());

请阅读有关ExpandoObject类的更多信息,并了解更多示例:表示可以在运行时动态添加和删除其成员的对象。

 类似资料:
  • 本文向大家介绍c#动态类型,及动态对象的创建,合并2个对象,map实例,包括了c#动态类型,及动态对象的创建,合并2个对象,map实例的使用技巧和注意事项,需要的朋友参考一下 经常会遇到这样的情况,我们在响应客户端请求的数据的时候需要对数据进行处理,比如数据库中的数据是int型,它可能表示某个枚举,或者其它的逻辑意义(数据库这样的设计可能是从数据安全性、存储量上等角度考虑),但是客户端显示的时候需

  • 问题内容: 我有类名称的列表,想动态创建它们的实例。例如: 如何在Python中动态创建该实例?谢谢! 问题答案: 这通常被称为反思或自省。找出类似的问题,这些问题可以回答您要尝试做的事情: Python是否具有与Java类forname等效的名称 您可以使用字符串实例化Python中的类吗

  • 问题内容: 我们需要创建SQLAlchemy类来访问多个外部数据源,这些数据源会随着时间的推移而增加。我们为核心ORM模型使用了声明式基础,并且我知道我们可以使用autoload = True手动指定新的ORM类,以自动生成映射。 问题是我们需要能够采用以下方式动态生成它们: 并动态地将其转换为如下所示: 我们不希望类的持久时间长于打开连接,执行查询然后关闭连接所需的时间。因此,理想情况下,我们可

  • 我有一些动态创建新div(表单内部的输入)的JS。它工作得很好。我还有一些jquery,它检查下拉输入,如果单击特定的选择,它会显示一个单独的div。它工作得很好。 如果我试图使用jquery在一个动态创建的div中显示一个单独的div,那么它将不起作用。它的第一个实例确实有效,但动态创建的实例都无效。在四处搜索之后,看起来我需要一个代表团,但我似乎无法针对我的具体情况找到它。 JSFIDLE:h

  • 问题内容: 我想获取一个传递的列表,该列表我知道是同构的,并从中创建一个与其中的元素类型相同的数组。 就像是… 问题答案: 转换将在运行时发生,而类型在编译时丢失。因此,您应该执行以下操作: 但是请注意,上面的第三行可能会引发异常-它不是类型安全的。

  • 问题内容: 给定一个类名,我想动态创建一个Groovy类,向其添加属性和方法。我使用创建新类 对于我使用的方法 其中it.key是字符串(方法名),it.value是闭包。这很方便,因为我可以指定方法参数类型并进行类型检查。但是,如果不给它赋值,就无法指定动态创建的属性类型。我可以通过显式定义属性的getter和setter来解决此问题。这可行,但是metaClass.name = value或m