• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

(论坛答疑点滴)如何动态设定类的属性和字段?

发布: 2007-7-01 11:09 | 作者: admin | 来源: | 查看: 16次 | 进入软件测试论坛讨论

领测软件测试网
正好有人问这个,代码非常简单,最基本的应用,直接贴代码

using System;

namespace Test
{
    /**//// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
        /**//// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            //
            MyFieldClass dv=new MyFieldClass();
            System.Collections.Hashtable ht1=new System.Collections.Hashtable();
            ht1.Add("FieldA","A");
            ht1.Add("FieldC","C");
            SetField1(ht1,dv);//如果类中的字段匹配Hashtable中的Key则重新设定
            //SetField2(ht1,dv)//如果Hashtable中的Key匹配类中的字段则重新设定,效果等同于SetField1
            Console.WriteLine(dv.FieldA);//A
            Console.WriteLine(dv.FieldB);//bb
            Console.WriteLine(dv.FieldC);//C
            System.Collections.Hashtable ht2=new System.Collections.Hashtable();
            ht2.Add("PropertyB","b");
            ht2.Add("PropertyC","c");
            SetProperty1(ht2,dv);//如果类中的属性匹配Hashtable中的Key则重新设定
            //SetProperty2(ht2,dv);//如果Hashtable中的Key匹配类中的属性则重新设定,效果等同于SetProperty1
            Console.WriteLine(dv.FieldA);//A
            Console.WriteLine(dv.FieldB);//b
            Console.WriteLine(dv.FieldC);//c
            
        }

        public static void SetProperty1(System.Collections.Hashtable ht1,MyFieldClass dv)
        {
            foreach(System.Collections.DictionaryEntry de in ht1)
            {
                System.Reflection.PropertyInfo pi=dv.GetType().GetProperty(de.Key.ToString());
                if(pi!=null)pi.SetValue(dv,de.Value.ToString(),null);
            }
        }

        public static void SetProperty2(System.Collections.Hashtable ht1,MyFieldClass dv)
        {
            foreach(System.Reflection.PropertyInfo pi in dv.GetType().GetProperties())
            {
                if(ht1.Contains(pi.Name))pi.SetValue(dv,ht1[pi.Name],null);
            }
        }

        public static void SetField1(System.Collections.Hashtable ht2,MyFieldClass dv)
        {
            foreach(System.Collections.DictionaryEntry de in ht2)
            {
                System.Reflection.FieldInfo fi=dv.GetType().GetField(de.Key.ToString());
                if(fi!=null)fi.SetValue(dv,de.Value.ToString());
            }
        }

        public static void SetField2(System.Collections.Hashtable ht2,MyFieldClass dv)
        {
            foreach(System.Reflection.FieldInfo fi in dv.GetType().GetFields())
            {
                if(ht2.Contains(fi.Name))fi.SetValue(dv,ht2[fi.Name]);
            }
        }
    }

    public class MyFieldClass
    {
        public string FieldA="aa";
        public string FieldB="bb";
        public string FieldC="cc";

        public string PropertyA
        {
            get
            {
                return FieldA;
            }
            set
            {
                FieldA=value;
            }
        }

        public string PropertyB
        {
            get
            {
                return FieldB;
            }
            set
            {
                FieldB=value;
            }
        }

        public string PropertyC
        {
            get
            {
                return FieldC;
            }
            set
            {
                FieldC=value;
            }
        }
    }

}


文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网