原文出處: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);
結果:
這真的在擴充上面,是非常好用的東西…