取得Class裡面所有的Property

  • 1972
  • 0

以前在程式出現Exception的時候,通常會需要紀錄一下當前各參數的情形,以方便偵錯
但有的Class的Property真的很多...

以前在程式出現Exception的時候,通常會需要紀錄一下當前各參數的情形,以方便偵錯
但有的Class的Property真的很多,一旦有個Class像這樣:

public class MyClass
    {
        public int Number { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Address { get; set; }
    }

想知道每個Property的話,我會寫成這樣:

textBox1.Text = new StringBuilder("MyClass的各個Property是:")
                                .AppendFormat("Name={0},", myNewClass.Name)
                                .AppendFormat("Age={0},", myNewClass.Age)
                                .AppendFormat("Address={0},", myNewClass.Address)
                                .AppendFormat("Number={0}", myNewClass.Number).ToString();

然後Property一旦有修改,免不了要把每個有用到的地方都找出來,一個一個改...

直到上個禮拜突然覺得:真的沒有別的解法嗎?我一定要這麼累?
於是開始上網找解法,就看到了Reflection
於是我會弄個方法像這樣:

private string GetPropertyString(StringBuilder vStringBuilder, Object vObject)
 {
 	PropertyInfo[] vPropertyInfos = vObject.GetType().GetProperties();
         foreach (PropertyInfo vPropertyInfo in vPropertyInfos)
         {
         	 	vStringBuilder.AppendFormat("{0}={1},", vPropertyInfo.Name, vPropertyInfo.GetValue(vObject, null));
         }
         return vStringBuilder.Remove(vStringBuilder.Length - 1, 1).ToString();
 }

然後要用的時候,就像這樣:

textBox2.Text = this.GetPropertyString(new StringBuilder("MyClass的各個Property是:"), myNewClass);

一行就結束,以後Property就算有改,也都不用再動手改了...

各位看倌如果有比較好的建議,還請不吝指教囉^^