2011-05-23 43 views
5

tại thời điểm tôi đang sử dụng ExpandoObject để tự động lưu trữ họ và họ.Có thể tạo cấu trúc cây động bằng ExpandoObject không?

ví dụ:

// 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"); 

Tôi đã tự hỏi nếu nó có thể tự động lưu trữ các lĩnh vực thành một cấu trúc cây để tôi có thể có lĩnh vực mẹ gọi tên, và sau đó hai lĩnh vực con gọi là FirstName và Họ. Lý tưởng nhất điều này có khả năng có thể được mở rộng để bao gồm các cấp phụ hơn. Tôi đã thực hiện một số mã psudo dưới đây để chứng minh lý tưởng làm thế nào tôi muốn nó hoạt động. (Tất nhiên mã này hiện đang gây ra lỗi)

// 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? Đó có phải là một số phép thuật của Harry Potter không? +1 cho câu hỏi thú vị – sehe

+0

@sehe, http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx –

+0

@George: Vâng, tôi được Google chứng nhận từ năm 2003 – sehe

Trả lời

6

bạn dừng gì từ làm

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"; 

Hoặc tương tự? Bạn sẽ không chính xác nhận được cây traversal miễn phí, nhưng đó là cơ bản một được đưa ra khi không sử dụng các nút strongtypes

Cập nhật; Tôi vừa biên soạn và chạy nó bằng trình biên dịch Mono C# trên Windows XP. Thậm chí không có MS.NET 4,0 cài đặt :)

+0

Vâng, đó là một lựa chọn nhưng vì nó khá mới tôi đã tự hỏi nếu có ai đã làm bất cứ điều gì thú vị với nó xung quanh cây/thư mục xem. cảm ơn câu trả lời – kevchadders

+0

chế độ xem dạng cây/thư mục? đó không phải là một phần của câu hỏi của bạn khi tôi đọc nó – sehe

+0

Đúng, tôi chỉ đề cập đến nó khi tôi đang xem xét mở rộng nó để bao gồm nhiều cấp phụ trong bài viết của tôi tương tự như một cái nhìn cây. – kevchadders

4

Sử dụng mã nguồn mở Dynamitey (có thể cài đặt qua NuGet, và là một di Class Library), bạn có thể làm expandoobject đồ thị như thế này:

using Dynamitey.DynamicObjects; 
    ... 

    dynamic New = Builder.New<ExpandoObject>(); 

    var person = New.Person(
     Name: New.Name(FirstName:"John", SurName:"Smith") 
); 

Bạn cũng có thể lấy một bó lồng nhau IDictionary<string,object> và làm cho chúng hoạt động như một đối tượng động với các thuộc tính động lồng nhau bằng cách sử dụng:

using Dynamitey.DynamicObjects.Dictionary = DynamicDict; 
... 

dynamic obj = new DynamicDict(nestedDictionaries); 
+0

cảm ơn nhận xét của bạn +1 – kevchadders

Các vấn đề liên quan