正好有人问这个,代码非常简单,最基本的应用,直接贴代码
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;
}
}
}
}