2013-12-11 22 views
7

Tôi muốn thêm một thuộc tính vào thuộc tính của đối tượng dynamic/expando object runtime, có thể không?Có thể thêm thuộc tính vào thuộc tính của thời gian chạy đối tượng động không?

Những gì tôi muốn làm là:

dynamic myExpando = new ExpandoObject(); 
myExpando.SomeProp = "string"; 
myExpando.AddAttribute("SomeProp", new MyAttribute()); 

Có thể làm điều đó bằng cách này hay cách khác?

+0

tại sao bạn không chạy mã đó và xem? –

+0

Bạn đã kiểm tra 'TypeDescriptor' chưa? http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor%28v=vs.110%29.aspx – Matthew

+0

@SamIam: Tôi không nghĩ anh ấy hy vọng nó hoạt động, nhưng phải rõ ràng , không. Nó không hoạt động. Kết quả là: 'RuntimeBinderException: 'System.Dynamic.ExpandoObject' không chứa định nghĩa cho 'AddAttribute'' – recursive

Trả lời

0

Bạn có thể thêm một thuộc tính cho một đối tượng năng động như thế này:

dynamic myExpando = new ExpandoObject(); 
      myExpando.SomeProp = "string"; 
      TypeDescriptor.AddAttributes(myExpando, new SerializableAttribute()); 

Để đọc các thuộc tính bạn nên sử dụng này:

dynamic values = TypeDescriptor.GetAttributes(myExpando); 
      for (int i = 0; i < values.Count; i++) 
      { 
       System.Console.WriteLine(values[i]); 
      } 

Tôi không chắc chắn bạn có thể đọc tùy chỉnh các thuộc tính như thế . Tuy nhiên, bạn cũng có thể thử phản ánh:

System.Reflection.MemberInfo info = myExpando.GetType(); 
      object[] attributes = info.GetCustomAttributes(true); 
      for (int i = 0; i < attributes.Length; i++) 
      { 
       System.Console.WriteLine(attributes[i]); 
      } 

Tuy nhiên, với phản ánh bạn không thể thấy thuộc tính mà bạn đã thêm vì thuộc tính là siêu dữ liệu tĩnh.

LoạiDescriptor là công cụ siêu dữ liệu do .NET FCL cung cấp. Bạn có thể đọc bài viết tại đây:

http://blogs.msdn.com/b/parthopdas/archive/2006/01/03/509103.aspx

+4

Nhưng điều này là thêm thuộc tính vào loại và không cho thuộc tính. –

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