2011-12-03 33 views
11

tôi có số nàyTự động thêm thuộc tính vào đối tượng động?

dynamic d = new ExpandoObject(); 
d.Name = attribute.QualifiedName.Name; 

vì vậy, tôi biết rằng d sẽ có tên thuộc tính. Bây giờ nếu tôi không biết tên của tài sản tại thời gian biên dịch, làm cách nào để thêm thuộc tính đó vào động. tôi đã tìm thấy điều này SO Question

vì vậy, khái niệm phức tạp của cuộc gọi binders, v.v. khó khăn để có được ở nơi đầu tiên.hơn đơn giản hơn để làm điều này?

+0

thể trùng lặp của [Thêm chưa biết (tại thời điểm thiết kế) tính đến một ExpandoObject] (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – nawfal

Trả lời

23
dynamic d = new ExpandoObject(); 
((IDictionary<string,object>)d)["test"] = 1; 
//now you have d.test = 1 
4

Bạn cũng có thể làm như thế này: -

Dictionary<string,object> coll = new Dictionary<string,object>(); 
    coll.Add("Prop1","hello"); 
    coll.Add("Prop2",1); 
    System.Dynamic.ExpandoObject obj = dic.Expando(); 

//You can have this ext method to better help 

public static ExpandoObject Expando(this IEnumerable<KeyValuePair<string, object>> 
dictionary) 
     { 
      var expando = new ExpandoObject(); 
      var expandoDic = (IDictionary<string, object>)expando; 
      foreach (var item in dictionary) 
      { 
       expandoDic.Add(item); 
      } 
      return expando; 
     } 
+0

cách tốt ... sạch hơn nhiều .. –

5

Dưới đây là một cách sạch

var myObject = new ExpandoObject() as IDictionary<string, Object>; myObject.Add("Country", "Ireland");

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