之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊!
然后今天我再上网找了找,被我找到了,跟大家分享一下。
其实原理并不复杂,就是通过反射利用属性名称去获取属性值,以前对反射不熟悉,所以没想到啊~
不得不说反射是一种很强大的技术。。
下面给代码,希望能帮到有需要的人。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace PropertyNameGetPropertyValueDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Person ps = new Person();
- ps.Name = "CTZ";
- ps.Age = 21;
- Demo dm = new Demo();
- dm.Str = "String";
- dm.I = 1;
- Console.WriteLine(ps.GetValue("Name"));
- Console.WriteLine(ps.GetValue("Age"));
- Console.WriteLine(dm.GetValue("Str"));
- Console.WriteLine(dm.GetValue("I"));
- }
- }
- abstract class AbstractGetValue
- {
- public object GetValue(string propertyName)
- {
- return this.GetType().GetProperty(propertyName).GetValue(this, null);
- }
- }
- class Person : AbstractGetValue
- {
- public string Name
- { get; set; }
- public int Age
- { get; set; }
- }
- class Demo : AbstractGetValue
- {
- public string Str
- { get; set; }
- public int I
- { get; set; }
- }
- }
如果觉得上面比较复杂了,可以看下面的简化版。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace GetValue
- {
- class Program
- {
- static void Main(string[] args)
- {
- Person ps = new Person();
- ps.Name = "CTZ";
- ps.Age = 21;
- Console.WriteLine(ps.GetValue("Name"));
- Console.WriteLine(ps.GetValue("Age"));
- }
- }
- class Person
- {
- public string Name
- { get; set; }
- public int Age
- { get; set; }
- public object GetValue(string propertyName)
- {
- return this.GetType().GetProperty(propertyName).GetValue(this, null);
- }
- }
- }
实质语句只有一句:
this.GetType().GetProperty(propertyName).GetValue(this, null);
其他可以忽略。。
Views:
255 Posted at:
2013-09-10
- 0
- 顶一下
本文介绍了一种使用C#反射技术根据属性名称获取属性值的方法。通过一个简单的示例展示了如何实现这一功能,这对于需要动态操作对象属性的场景非常有用。
1118

被折叠的 条评论
为什么被折叠?



