是否可以使用ExpandoObject创建动态树结构?
此刻我正在使用ExpandoObject动态存储名字和姓氏。是否可以使用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");
我在想,如果有可能的领域动态存储到一个树形结构,这样我可以有一个名为名称父字段,然后两个子字段:名字和姓氏。理想情况下,这可能会扩展到包含更多的子级别。我已经在下面做了一些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安装:)
这样的信息网站上被带走太多是的,这是一个选项,但是因为它很新,我想知道是否有人在树/文件夹视图中做了任何有趣的事情。感谢您的回答 – kevchadders 2011-05-24 07:40:33
树/文件夹视图?当我阅读它时,这不是你问题的一部分 – sehe 2011-05-24 08:19:04
没错,我只是提到它,因为我正在考虑将其扩展为在类似树视图的帖子中包含更多子级别。 – kevchadders 2011-05-24 08:58:59
使用开源Dynamitey(可通过安装的NuGet,并且是一种便携式类库),你可以expandoobject图所示:
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);
感谢您的意见+1 – kevchadders 2014-02-12 15:39:07
Expando?那是哈利波特的咒语吗? +1有趣的问题 – sehe 2011-05-23 15:01:31
@sehe,http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx – 2011-05-23 15:03:41
@George:是的,我自2003年起通过谷歌认证 – sehe 2011-05-23 15:07:36