[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);

結果:

2012-09-07_180059

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


當麻許的超技八 2014 | Donma Hsu Design.