【发布时间】:2016-02-25 09:53:13
【问题描述】:
我正在尝试使用反射来清理我的班级。
private List<String> centers = new List<String>();
private List<String> leftWingers = new List<String>();
private List<String> rightWingers = new List<String>();
private List<String> defencemen = new List<String>();
private List<String> goalies = new List<String>();
private List<String> bench = new List<String>();
public List<String> Centers { get { return centers; } set { centers = value; } }
public List<String> LeftWingers { get { return leftWingers; } set { leftWingers = value; } }
public List<String> RightWingers { get { return rightWingers; } set { rightWingers = value; } }
public List<String> Defencemen { get { return defencemen; } set { defencemen = value; } }
public List<String> Goalies { get { return goalies; } set { goalies = value; } }
public List<String> Bench { get { return bench; } set { bench = value; } }
public String ToString()
{
String output = "";
System.Reflection.PropertyInfo[] properties = this.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo property in properties)
{
int count = 0;
foreach (String value in property)
{
count++;
output += "C" + count + ": " + value + System.Environment.NewLine;
}
}
}
这行不通。我似乎无法遍历每个属性的项目,因为它们是集合。有没有办法从 PropertyInfo 对象中获取字符串列表的内容?
【问题讨论】:
-
这些是字段,而不是属性 - 类似于
this.GetType().GetFields().Select(f => f.GetValue(this))? -
只有六个系列吗?为什么要使用反射?
-
改用 GetFields()
-
有很多方法可以改进该代码……而反射最多应该是要尝试的事情列表中的最后一个。 IE。只需将所有数组放入集合中就足以简化代码而无需反射。
-
@AlexeiLevenkov 这可能是一个简化的例子。对 this.GetType() 的调用也允许检索在派生类型上定义的成员。当然不是一个好方法,但是 this.GetType() 会对派生类型产生影响,清除基类中的集合集合不会
标签: c#