zoukankan      html  css  js  c++  java
  • (论坛答疑点滴)如何按照HashTable动态设定类的属性和字段?

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

    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;
                }

            }

        }


    }

    欢迎大家阅读我的极客时间专栏《Java业务开发常见错误100例》【全面避坑+最佳实践=健壮代码】
  • 相关阅读:
    策略模式-观察者模式-装饰者模式-工厂模式-单例模式
    mac下 tomcat8+jdk1.8+servlet+Spring环境搭建中的问题
    删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
    JAVA锁的膨胀过程和优化
    单例模式
    简单工厂模式(静态工厂)和工厂方法模式和抽象工厂模式
    从基层容器类看万变不离其宗的JAVA继承体系
    响应式布局1
    网页加载速度优化4--图片懒加载
    jquery选择器返回值
  • 原文地址:https://www.cnblogs.com/lovecherry/p/146461.html
Copyright © 2011-2022 走看看