2017-02-14

c# reflection getProperty and getValue

你曾經想要把 object 中所有的 property name 跟內容都取出來確認嗎?如果每次程式跑 debug 都花個五分鐘,或是你跟我一樣急性子的話,你一定不會想在 debug 下一個一個去確認值是否正確;另外的做法是把手動把值顯示出來,但如果這個 object 有 10 個 property 或是你需要確認多個不同的 object ,想必你也不想一個一個慢慢寫,或許可以參考我的笨方法


說明

  • 取得目標物件的型別
  • 取得目標型別的屬性資訊
  • 以目標型別的屬性資訊來取得屬性名稱及屬性值

console

  • 依 LINQPad 為例
void Main()
{

 userData user = new userData { id = Guid.NewGuid(), name = "yowko", tel = "1234567890" };

 Type t = typeof(userData);
 PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
 foreach (var element in propInfos)
 {
  element.Name.Dump();
  element.GetValue(user).Dump();
 }
}

public class userData
{
 public Guid id { get; set; }

 public string name { get; set; }

 public string tel { get; set; }
}

ASP.NET MVC

@using System.Reflection
@model TestConfiguration.Handler.YowkoConfigSectionHandler
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@foreach (var item in Model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
<div class="row">
    <div class="col-lg-1">@item.Name</div>
    <div class="col-lg-3">@item.GetValue(Model)</div>
</div>
}

參考資料

  1. How to Get the Property value using reflection in C# ?
  2. PropertyInfo.GetValue 方法 (Object)
  3. Type.GetProperties 方法 (BindingFlags)

沒有留言:

張貼留言