日期:2014-02-13  浏览次数:20467 次


正好有人问这个,代码非常简单,最基本的应用,直接贴代码

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());
  &n