C#超級方便的ExpandoObject爲類別加動態屬性 (實用,贊)

原文出處:https://www.cnblogs.com/simadi/p/6709481.html
這東西是.NET Framework 4.5 的新東西..
發現這個,大概就跟發現新大陸一樣的興奮,讓我再次讚歎Anders Hejlsberg 之神.. 
這邊有MSDN : http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx 

簡單看一下他方便的地方..
 
我自己建立一個對象:

public class Product
{
    public string Name { get; set; }
}

這時候如果我在'執行期' 的時候,需要加入一個dynamic 的屬性..
叫做Description 怎麼辦呢?!

首先,我寫一隻method 會將原本的Product 對象,轉成Key Value 型態後轉成ExpandoObject

/// <summary>
/// 轉成可以擴充的對象
/// </summary> www.it165.net
/// <param name="obj"></param>
/// <returns></returns>
public dynamic ConvertToDynamic(object obj)
{
  IDictionary<string, object> result = new ExpandoObject();
 
  foreach (PropertyDescriptor pro in TypeDescriptor.GetProperties(obj.GetType()))
  {
    result.Add(pro.Name, pro.GetValue(obj));
  }
 
  return result as ExpandoObject;
}


之後就可以在'執行期' 加入新屬性..
 

Product p1 = new Product();
p1.Name = "商品名稱";
  
dynamic exProd = ConvertToDynamic(p1);
//下面兩個屬性都是 在執行期可被擴充出來的
exProd.Description = "敘述";
exProd.NewProperty1 = "我是新屬性";
 
Response.Write(exProd.Name + "," + exProd.Description + "," + exProd.NewProperty1);

結果:

這真的在擴充上面,是非常好用的東西…

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章