是否可以使用扩展对象创建动态树结构
本文关键字:动态 结构 创建 对象 可以使 扩展 是否 | 更新日期: 2023-09-27 17:57:15
目前我正在使用ExpandoObject来动态存储名字和姓氏。
例如
// Create Expando object for testing
dynamic employee = new ExpandoObject();
// Dynamically add the fields to the expando
((IDictionary<String, Object>)employee).Add("FirstName", "John");
((IDictionary<String, Object>)employee).Add("Surname", "Smith");
我想知道是否可以将字段动态存储到树结构中,以便我可以拥有名为 Name 的父字段,然后是两个名为 Firstname 和 Surname 的子字段。理想情况下,这可能会扩展到包括更多子级别。我在下面做了一些 psudo 代码来理想地演示我希望它如何工作。(当然,此代码当前会导致错误)
// Create Expando object for testing
dynamic employee = new ExpandoObject();
// Dynamically add the Name
((IDictionary<String, Object>)employee).Add("Name", "");
//Dynamically add the firstname and surname to employee.Name
((IDictionary<String, Object>)employee.Name).Add("FirstName", "John");
((IDictionary<String, Object>)employee.Name).Add("Surname", "Smith");
是什么阻止你做
dynamic parent = new ExpandoObject();
parent.Nick = "Dad";
parent.Name = new ExpandoObject();
parent.Name.FirstName = "John";
parent.Name.MiddleName = "Tweeds";
parent.Name.SurName = "Doe";
parent.Spouse = new ExpandoObject();
parent.Spouse.Nick = "Sweety";
parent.Children = new [] {
new ExpandoObject(),
new ExpandoObject()
};
parent.Children[0].Nick = "P-J";
parent.Children[0].Name = "Pete-Jay";
parent.Children[1].Nick = "Tammie";
parent.Children[1].Name = "Tamara";
还是类似的?你不会完全免费获得树遍历,但在不使用strongtypes节点时,这基本上是给定的。
更新;我刚刚在Windows XP上使用Mono C#编译器编译并运行了它。甚至没有安装 MS.NET 4.0 :)
使用开源 Dynamitey(可以通过 nuget 安装,并且是一个可移植的类库),您可以制作如下的扩展对象图:
using Dynamitey.DynamicObjects;
...
dynamic New = Builder.New<ExpandoObject>();
var person = New.Person(
Name: New.Name(FirstName:"John", SurName:"Smith")
);
您还可以使用一堆嵌套IDictionary<string,object>
,并使它们像具有嵌套动态对象属性的动态对象一样运行:
using Dynamitey.DynamicObjects.Dictionary = DynamicDict;
...
dynamic obj = new DynamicDict(nestedDictionaries);