none
請問下如果要用文字取出實體物件的內部資料 要如何才能取得陣列、封裝的內部資料? RRS feed

  • 問題

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                A aa = new A();
                aa.b.c.d = "No1";
                aa.b.c2[0].d = "No2";
                aa.b.C3.d = "No3";
                Console.WriteLine(Find(aa, "b>c>d"));
              //  Console.WriteLine(Find(aa, "b>c2>d"));
              //  Console.WriteLine(Find(aa, "b>C3>d"));

                Console.ReadKey();

            }
            static string Find(object root, string Path)
            {
                object gg = root;
                for (int p = 0; p < Path.Split('>').Length; p++)
                    gg = gg.GetType().GetField(Path.Split('>')[p]).GetValue(gg);
                return gg.ToString();
            }

        }

        public class A
        {
            public B b = new B();
        }
        public class B
        {
            public C c = new C();
            public C[] c2 = new C[] { new C() };
            C c3=new C();
            public List<C> c4 = new List<C>();
            public C C3
            {
                get
                {
                    return c3;
                }

                set
                {
                    c3 = value;
                }
            }

            public B()
            {
                c4.Add(new C());
            }
        }

        public class C
        {
            public string d = "";
        }
    }

    如果我把 

    //  Console.WriteLine(Find(aa, "b>c2>d"));
    //  Console.WriteLine(Find(aa, "b>C3>d"));

    這兩行取消註解,我要能夠看到結果是
    No1

    No2

    No3

    Find() 要怎麼改? 或是說 有更好的方法?

    2016年2月22日 上午 09:13

解答