<p class="title">一、引入
最近遇到一个项目里面的功能,在给实体类赋值的时候,由于赋值字段是动态生成的,所以如果用常用的方法(直接实体类的名称.字段名=要赋的值),将会生成很多无用的代码,所以找到了一个通过反射的赋值与取值的方法,顺便总结一下,以及对比一下与Python语言同样实现该功能的区别之处。
<span style="color: #0000ff">namespace<span style="color: #000000"> ConsoleApplication1
{
<span style="color: #0000ff">class<span style="color: #000000"> Program
{
<span style="color: #0000ff">static <span style="color: #0000ff">void Main(<span style="color: #0000ff">string<span style="color: #000000">[] args)
{
<span style="color: #0000ff">#region 通过字符串设置实体类的值
<span style="color: #008000">//<span style="color: #008000">初始化一个实体类
<span style="color: #008000">//<span style="color: #008000">Student model_stu = new Student();
<span style="color: #008000">//<span style="color: #008000">string id_str = "stu_id";
<span style="color: #008000">//<span style="color: #008000">string name_str = "stu_name";
<span style="color: #008000">//<span style="color: #008000">string addr_str = "stu_address";
<span style="color: #008000">//<span style="color: #008000">Type type = model_stu.GetType();<span style="color: #008000">//<span style="color: #008000">获取类型
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_id = type.GetProperty(id_str);
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_name = type.GetProperty(name_str);
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_addr = type.GetProperty(addr_str);
{
<span style="color: #0000ff">class<span style="color: #000000"> Program
{
<span style="color: #0000ff">static <span style="color: #0000ff">void Main(<span style="color: #0000ff">string<span style="color: #000000">[] args)
{
<span style="color: #0000ff">#region 通过字符串设置实体类的值
<span style="color: #008000">//<span style="color: #008000">初始化一个实体类
<span style="color: #008000">//<span style="color: #008000">Student model_stu = new Student();
<span style="color: #008000">//<span style="color: #008000">string id_str = "stu_id";
<span style="color: #008000">//<span style="color: #008000">string name_str = "stu_name";
<span style="color: #008000">//<span style="color: #008000">string addr_str = "stu_address";
<span style="color: #008000">//<span style="color: #008000">Type type = model_stu.GetType();<span style="color: #008000">//<span style="color: #008000">获取类型
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_id = type.GetProperty(id_str);
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_name = type.GetProperty(name_str);
<span style="color: #008000">//<span style="color: #008000">PropertyInfo property_info_addr = type.GetProperty(addr_str);
</span><span style="color: #008000">//</span><span style="color: #008000">property_info_id.SetValue(model_stu,5);
</span><span style="color: #008000">//</span><span style="color: #008000">property_info_name.SetValue(model_stu,"李四");
</span><span style="color: #008000">//</span><span style="color: #008000">property_info_addr.SetValue(model_stu,"北京市");
</span><span style="color: #008000">//</span><span style="color: #008000">Console.WriteLine(model_stu.stu_id);
</span><span style="color: #008000">//</span><span style="color: #008000">Console.WriteLine(model_stu.stu_name);
</span><span style="color: #008000">//</span><span style="color: #008000">Console.WriteLine(model_stu.stu_address);
</span><span style="color: #008000">//</span><span style="color: #008000">Console.ReadKey();</span>
<span style="color: #0000ff">#endregion</span>
<span style="color: #0000ff">#region</span> 通过字符串获取实体类的值
<span style="color: #008000">//</span><span style="color: #008000">初始化一个实体类</span>
Student model_stu = <span style="color: #0000ff">new</span><span style="color: #000000"> Student()
{
stu_id </span>= <span style="color: #800080">1</span><span style="color: #000000">,stu_name </span>= <span style="color: #800000">"</span><span style="color: #800000">张三</span><span style="color: #800000">"</span><span style="color: #000000">,stu_address </span>= <span style="color: #800000">"</span><span style="color: #800000">上海市</span><span style="color: #800000">"</span><span style="color: #000000">
};
</span><span style="color: #0000ff">string</span> id_str = <span style="color: #800000">"</span><span style="color: #800000">stu_id</span><span style="color: #800000">"</span><span style="color: #000000">;
</span><span style="color: #0000ff">string</span> name_str = <span style="color: #800000">"</span><span style="color: #800000">stu_name</span><span style="color: #800000">"</span><span style="color: #000000">;
</span><span style="color: #0000ff">string</span> addr_str = <span style="color: #800000">"</span><span style="color: #800000">stu_address</span><span style="color: #800000">"</span><span style="color: #000000">;
Type type </span>= model_stu.GetType();<span style="color: #008000">//</span><span style="color: #008000">获取类型</span>
PropertyInfo property_info_id =<span style="color: #000000"> type.GetProperty(id_str);
PropertyInfo property_info_name </span>=<span style="color: #000000"> type.GetProperty(name_str);
PropertyInfo property_info_addr </span>=<span style="color: #000000"> type.GetProperty(addr_str);
Console.WriteLine(property_info_id.GetValue(model_stu));
Console.WriteLine(property_info_name.GetValue(model_stu));
Console.WriteLine(property_info_addr.GetValue(model_stu));
Console.ReadKey();
</span><span style="color: #0000ff">#endregion</span><span style="color: #000000">
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span><span style="color: #000000"> Student
{
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> stu_id { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> stu_name { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> stu_address { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
}
}