C#怎么循环对象中的成员,在winform中应用

  class PrjInit   //创建类
    {
        public static MainForm _MainForm;//主页面   
        public static ChildPanelUI1 _ChildPanelUI1; //用于存放子页面
        public static ChildPanelUI2 _ChildPanelUI2;
        public static ChildPanelUI3 _ChildPanelUI3;
        public static ChildPanelUI4 _ChildPanelUI4;
        public static ChildPanelUI5 _ChildPanelUI5
    }

//下面是在初始化中加载

            if (PrjInitSet._ChildPanelUI1 == null)
            {
                PrjInitSet._ChildPanelUI1 = new ChildPanelUI1();//页面显示窗口
                panel2.Controls.Add(PrjInitSet._ChildPanelUI1);
                PrjInitSet._ChildPanelUI1.Dock = DockStyle.Fill;
            }

           if (PrjInitSet._ChildPanelUI2 == null)
            {
                PrjInitSet._ChildPanelUI2 = new ChildPanelUI2();//页面显示窗口
                panel2.Controls.Add(PrjInitSet._ChildPanelUI2);
                PrjInitSet._ChildPanelUI2.Dock = DockStyle.Fill;
            }

.......................................................

以上方面太麻烦,有没有更快捷的方法

使用反射,通过反射获取所有的属性,然后判断输出即可

PrjInit cls_p = new PrjInit(); // 记住这个实例化的对象名
//cls_p.各种操作

//然后开始反射获得属性
Type t = typeof(PrjInit)
PropertyInfo[] pis = t.GetProperties();
for(int i=0;i<pis.Length;i++)
{
    PrepertyInfo pi = pis[i];
    string name = pi.Name; // 获得属性名称
    object val = pi.GetValue(cls_p); // 这里的参数就是你具体实例的对象
}

 

后来根据CSDN专家指导,这样写可以查到类里面的字段了。但是,还是不懂怎么把    PrjPanelInit._ChildDisplayUI1 = new ChildDisplayUI1();//页面显示窗口  这段,循环成6个子窗体都实例化

 

 

private void FormLoadIni()//放到Form1_Load(object sender, EventArgs e)里面执行,初始化加载子窗体
        {
           
            //然后开始反射获得属性
            FieldInfo[] fieldInfos = typeof(PrjPanelInit).GetFields();//获取PrjPanelInit类中的字段

            Console.WriteLine(fieldInfos.Length);

            foreach (System.Reflection.FieldInfo item in fieldInfos)
            {
                string name2 = item.Name; //名称
                object value = item.GetValue(fieldInfos);  //值
               
                if (value == null)//如果子窗体没有实例化,为空
                {
                    PrjPanelInit._ChildDisplayUI1 = new ChildDisplayUI1();//页面显示窗口
                    panel1.Controls.Add(PrjPanelInit._ChildDisplayUI1);
                    PrjPanelInit._ChildDisplayUI1.Dock = DockStyle.Fill;
                }

          
            }

        }

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632