如何在不使用switch的情况下通过字符串在对象内获取私有字段值?

时间:2011-09-19 17:20:17

标签: c#

说,classA有私有字段A,B,C,D,E ..我想在{{1}内部构建一个私有(我相信我不能公开?)方法StringToProperty } classA返回A。

1 个答案:

答案 0 :(得分:3)

首先,确定它可以是一种公共方法。如果您希望该方法不能公开,因为它调用的是私有的,那就不准确了。将公共方法/属性视为对底层私有成员的受控窗口。

因此,要检索属性,可以使用反射。

public string StringToProperty(string fieldName)
{
  Type myType = this.GetType();
  FieldInfo field = myType.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
  return Convert.ToString(field.GetValue(this)); 
}

点击此处了解更多信息:http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.getvalue.aspx

应该这样做,但我警告你,反射可能会导致性能下降,具体取决于你加载的内容和频率。请确保它的性能足以满足您的需求,因为您可能需要对FieldInfo数据进行某种缓存。