例如,ControllerBase
类的ViewBag属性,我们可以动态获取/设置值,并为此对象添加任意数量的附加字段或属性,这很酷。我想要使用类似的东西,超出MVC应用程序和Controller
类在其他类型的应用程序中。当我尝试创建dynamic对象并设置它的属性时如下:
1. dynamic 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.TheAnswerToLifeTheUniverseAndEverything = 42;
使用动态添加和设置属性。
答案 0 :(得分:243)
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 class以及更多示例:表示一个对象,其成员可以在运行时动态添加和删除。
答案 1 :(得分:30)
ExpandoObject
。
dynamic MyDynamic = new ExpandoObject(); // note, the type MUST be dynamic to use dynamic invoking.
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;
答案 2 :(得分:26)
我最近需要更进一步,即根据用户定义的条目,在动态对象中添加属性,动态自动。此处的示例和Microsoft's ExpandoObject documentation中的示例并未专门针对动态添加属性,但可以通过枚举和删除属性的方式进行推测。无论如何,我认为这可能对某人有所帮助。以下是如何向ExpandoObject添加真正动态属性的极其简化版本(忽略关键字和其他处理):
{{1}}
答案 3 :(得分:10)
您可以使用ExpandoObject Class
命名空间中的System.Dynamic
。
dynamic MyDynamic = new ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.SomeProperty = SomeValue
MyDynamic.number = 10;
MyDynamic.Increment = (Action)(() => { MyDynamic.number++; });
更多信息可以在 ExpandoObject MSDN
答案 4 :(得分:7)
dynamic MyDynamic = new ExpandoObject();
答案 5 :(得分:4)
dynamic myDynamic = new { PropertyOne = true, PropertyTwo = false};
答案 6 :(得分:1)
var data = new { studentId = 1, StudentName = "abc" };
或存在值
var data = new { studentId, StudentName };