C# 反射和获取属性
Posted
技术标签:
【中文标题】C# 反射和获取属性【英文标题】:C# Reflection and Getting Properties 【发布时间】:2011-02-15 07:01:56 【问题描述】:我有以下虚拟类结构,我试图找出如何从 PeopleList 中 People 类的每个实例中获取属性。我知道如何从 People 的单个实例中获取属性,但我一生都无法弄清楚如何从 PeopleList 中获取属性。我确信这真的很简单,但有人能指出我正确的方向吗?
public class Example
public class People
private string _name;
public string Name
get return _name;
set _name = value;
private int _age;
public int Age
get return _age;
set _age = value;
public People()
public People(string name, int age)
this._name = name;
this._age = age;
public class PeopleList : List<People>
public static void DoStuff()
PeopleList newList = new PeopleList();
// Do some stuff
newList.Add(new People("Tim", 35));
【问题讨论】:
看这个帖子:***.com/questions/862783/… 您无法从PeopleList
获取它们是什么意思?除了标准Count
和Capacity
之外,您的示例中没有其他属性...
不太清楚你的意思。是否有可能从People
继承的不同类,并且您想获取这些属性,或者您只是想获取列表中项目的各种值(如果是这样,我不明白您为什么需要对此进行反思)。您能否添加一个您打算如何使用这些数据的示例(伪代码应该足够好)。
为什么需要重新选举?
抱歉,这不是一个经过深思熟虑的例子。我打算做的,这也可能是错误的,是有一个通用的方法,我将 PeopleList 传入,T 可以是 PeopleList。然后我将遍历 PeopleList 的每个实例,获取 People 的属性及其值。 T 可以是从 List仍然不能 100% 确定您想要什么,但是这段快速的代码(未经测试)可能会让您走上正确的轨道(或者至少有助于阐明您想要什么)。
void ReportValue(String propName, Object propValue);
void ReadList<T>(List<T> list)
var props = typeof(T).GetProperties();
foreach(T item in list)
foreach(var prop in props)
ReportValue(prop.Name, prop.GetValue(item));
c# 应该能够计算出 'PeopleList' 继承自 'List' 并处理得很好,但是如果您需要将 'PeopleList' 作为泛型类型,那么这应该可以工作:
void ReadList<T>(T list) where T : System.Collections.IList
foreach (Object item in list)
var props = item.GetType().GetProperties();
foreach (var prop in props)
ReportValue(prop.Name, prop.GetValue(item, null));
请注意,这实际上也会处理列表中派生类型的属性。
【讨论】:
这几乎正是我打算做的。但是,如果 (ListIEnumerable<T>
,因为我猜测 PeopleList
是IEnumerable<Person>
。以上是关于C# 反射和获取属性的主要内容,如果未能解决你的问题,请参考以下文章