none
如何列舉並存取物件的成員? RRS feed

  • 問題

  • 假設我現在有三個物件分別是

     

    public class A{
        public string id{ get; set;}
        public string name{ get; set;}
        public string sex{ get; set;}
    }
    
    public class B{
        public string title{ get; set;}
        public string content{ get; set;}
        public string type{ get; set;}
    }
    
    public class C{
        public string maxLength{ get; set;}
        public string maxTime{ get; set;}
        public string goodsTime{ get; set;}
    }
    

    是否有辦法用列舉的方式取得或設定他們的值

    如一個METHOD

     

    public static void GetObj<T> (Dictionary<string,string> map) where T:new(){
        T a = new T();
        foreach(成員 in ?????(a)){
           成員.value = map[成員.name];
        }
        return a;
    }
    

    類似這樣的辦法呢?

     

     


    • 已編輯 Vencin 2011年11月5日 下午 04:36
    2011年11月5日 下午 04:34

解答

所有回覆

  • 請搜尋 ".NET Reflection"...

    http://www.codeproject.com/KB/dotnet/Reflection.aspx


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure
    • 已提議為解答 亂馬客 2011年11月6日 上午 01:21
    • 已標示為解答 Vencin 2011年11月6日 上午 02:52
    • 已取消標示為解答 Vencin 2011年11月6日 上午 02:58
    2011年11月6日 上午 12:31
    版主
  • 不好意思 不知道是不是我用法有錯誤

    public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e) {
                A a = new A();
                PropertyInfo[] M = a.GetType().GetProperties();
                foreach (PropertyInfo p in M) {
                    MethodInfo m = p.GetSetMethod().MakeGenericMethod();
                    m.Invoke(a, new object[] { "!!!!" });
                }
                listBox1.Items.Add(a.id);
            }
        }
        public class A {
            public string id { get; set; }
            public string title { get; set; }
        }
    

    寫了這樣子想測試 Reflection的用法  但是我把斷點設在m.Invoke(a, new object[] { "!!!!" }); 卻停不下來 ListBox也沒有東西

    麻煩糾正我一下

    2011年11月6日 上午 08:06
  • 你能不能把你的問題再詳細的說清楚?你是希望動態地在寫程式時把類別中的成員 (欄位、屬性、方法) 列出來,還是在執行時把類別實體中的成員的值列出來?

    以你最後一個程式為例,你到底想在 ListBox 中看到什麼?

     


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    2011年11月6日 上午 08:30
  • 我希望在執行期間 用列舉的方式設定或取得成員的值

    參考小朱大大的文章後想用自動屬性的存取子來設定成員的值

    我看起來應該可以 應該是我寫法有問題

    以最後一個程式來說 我希望在ListBox看到a.id的值也就是!!!!


    • 已編輯 Vencin 2011年11月6日 上午 08:56
    2011年11月6日 上午 08:53
  • PropertyInfo 不是有 SetValue() 可以用嗎...

    http://www.dotblogs.com.tw/regionbbs/archive/2011/02/09/invoke.generic.methods.aspx 


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2011年11月6日 上午 09:21
    版主
  • SetValue後成功了 謝謝小朱大大指教
    2011年11月6日 上午 09:36