如何在C#中创建自己的动态类型或动态对象? [英] How to create own dynamic type or dynamic object in C#?

查看:159
本文介绍了如何在C#中创建自己的动态类型或动态对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如, ControllerBase class的rel =noreferrer> ViewBag 属性很酷,我想使用类似的东西,除了MVC应用程序和 Controller 类在其他类型的应用程序。当我尝试创建动态对象,并设置其属性如下所示:

  1。动态MyDynamic = new {A =a}; 
2. MyDynamic.A =asd;
3. Console.WriteLine(MyDynamic.A);

我有 RuntimeBinderException 与消息属性或索引器'<> f__AnonymousType0.A'不能被分配到 - 它是只读在第2行。我建议这不是我正在寻找。也许有一些课程可以让我做一些类似的事情:

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

与动态添加和设置属性。

解决方案

 动态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类和更多示例:表示可以在运行时动态添加和删除其成员的对象。


There, is for example, ViewBag property of ControllerBase class and we can dynamically get/set values and add any number of additional fields or properties to this object, which is cool .I want to use something like that, beyond MVC application and Controller class in other types of applications. When I tried to create dynamic object and set it's property like below:

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

I've got RuntimeBinderException with message Property or indexer '<>f__AnonymousType0.A' cannot be assigned to -- it is read only in line 2. Also I suggest It's not quite what I'm looking-for. Maybe is there some class which can allow me to do something like:

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

with dynamic adding and setting properties.

解决方案

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());

Read more about ExpandoObject class and for more samples: Represents an object whose members can be dynamically added and removed at run time.

这篇关于如何在C#中创建自己的动态类型或动态对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆