C#是強類型語言,強到多變態?一個對象沒有定義某個屬性,你想點出來,IDE直接給你報語法錯誤。遠不如js那么自由,想怎么點怎么點。
如果你從別人接口中拿到的就是Object類型,你想獲取某個屬性的值怎么辦?
弱類型語言中,一個對象可以隨便點出里面的屬性,即使沒有定義也只是返回給你一個undefined。強類型語言就必須使用實體(類),還好C#有個dynamic,讓c#具備了弱類型語言特性
eg1:
static void Main(string[] args) { object obj = new { Name = "小明", SayHi = "你妹的!" }; dynamic dyName = ((dynamic)obj).Name; dynamic dySayHi = ((dynamic)obj).SayHi; Console.WriteLine(dyName + "\t" + dySayHi); }
你可以創建一個實體,用序列化再反序列化的方式,當然筆者不推薦,如果你就用一次的話還要為之創建一個實體,累不累啊!
下面是筆者推薦的方式,先把對象轉化成Type類型,再獲取它的屬性,再獲取屬性的值
eg2:
static void Main(string[] args) { object obj = new { Name = "小明", SayHi = "你妹的!" }; Console.WriteLine("Name:\t" + obj.GetType().GetProperty("Name").GetValue(obj)); Console.WriteLine("SayHi:\t" + obj.GetType().GetProperty("SayHi").GetValue(obj)); Console.ReadKey(); }
eg3:
class Program { static void Main(string[] args) { GetObjectPropertyValue(); Console.ReadKey(); } private static void GetObjectPropertyValue() { List<object> list = (List<object>)GetObj();//強制類型轉化 foreach (var item in list) { Console.WriteLine(item.GetType().GetProperty("Title").GetValue(item) + "\t" + item.GetType().GetProperty("Content").GetValue(item)); } } private static object GetObj() { List<object> list = new List<object>(); object message = new { Title = "ceshi111", Content = "hahahah111" }; object message2 = new { Title = "ceshi222", Content = "hahahah222" }; list.Add(message); list.Add(message2); return list; } }
轉自https://www.cnblogs.com/xbblogs/p/7739483.html