2018年7月4日 星期三

[C#] 在執行階段以動態方式加入和移除其成員的ExpandoObject

引用System.Dynamic名稱空間。

ExpandoObject:代表可在執行階段以動態方式加入和移除其成員的物件。

ExpandoObject可轉型成IDictionary介面,並檢測成員是否存在或移除成員。


public static void Main(string[] args)
{
   dynamic obj = new ExpandoObject();

   //動態加入屬性
   obj.Name = "Mike.Lin";
   obj.Dept = "業務部";
   obj.Salary = 30000;
   Console.WriteLine(obj.Name);
   Console.WriteLine(obj.Salary);

   //使用泛型委派,動態加入方法
   obj.Combine = (System.Action)((string x, string y) =>
   {
      Console.WriteLine(x + "." + y);
   });
   obj.Combine("John", "Hu");

   //ExpandoObject可轉型成IDictionary
   var temp = (IDictionary<string, object>) obj;
   //檢測成員是否存在
   Console.WriteLine(temp.ContainsKey("Combine"));

   //移除成員
   temp.Remove("Salary");
   temp.Remove("Combine");

   //檢測成員是否存在
   Console.WriteLine(temp.ContainsKey("Combine"));

   //轉成JSON字串
   var json = JsonConvert.SerializeObject(obj);
   Console.WriteLine(json);
}

沒有留言:

張貼留言