[C#] 超級方便的 ExpandoObject 類別
2012-11-06
這東西是 .NET Framework 4.0 的東西..
發現這個,大概就跟發現新大陸一樣的興奮,讓我再次讚嘆 Anders Hejlsberg 之神..
這邊有MSDN : http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx
簡單看一下他方便的地方..
我自己建立一個物件:
public class Product
{
public string Name { get; set; }
}
這時候 如果我在'執行期' 的時候,需要加入一個dynamic 的屬性..
叫做 Description 怎麼辦呢?!
/// <summary>
/// 轉成可以擴充的物件
/// </summary>
/// <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;
}
我寫一隻method 會將原本的Product 物件,轉成Key Value 型態後 轉成 ExpandoObject
之後就可以在'執行期' 加入新屬性..
Product p1 = new Product();
p1.Name = "商品名稱";
dynamic exProd = ConvertToExpandoObject(p1);
//下面兩個屬性都是 在執行期可被擴充出來的
exProd.Description = "敘述";
exProd.NewProperty1 = "我是新屬性";
Response.Write(exProd.Name + "," + exProd.Description + "," + exProd.NewProperty1);
結果:
這真的在擴充上面,是非常好用的東西…