2011-05-23 126 views
5

此刻我正在使用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");  
+0

Expando?那是哈利波特的咒語嗎? +1有趣的問題 – sehe 2011-05-23 15:01:31

+0

@sehe,http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx – 2011-05-23 15:03:41

+0

@George:是的,我自2003年起通過谷歌認證 – sehe 2011-05-23 15:07:36

回答

6

什麼從做

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安裝:)

+0

這樣的信息網站上被帶走太多是的,這是一個選項,但是因爲它很新,我想知道是否有人在樹/文件夾視圖中做了任何有趣的事情。感謝您的回答 – kevchadders 2011-05-24 07:40:33

+0

樹/文件夾視圖?當我閱讀它時,這不是你問題的一部分 – sehe 2011-05-24 08:19:04

+0

沒錯,我只是提到它,因爲我正在考慮將其擴展爲在類似樹視圖的帖子中包含更多子級別。 – kevchadders 2011-05-24 08:58:59

4

使用開源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); 
+0

感謝您的意見+1 – kevchadders 2014-02-12 15:39:07

相關問題