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

C# 如何在不使用开关的情况下通过对象内的字符串获取私有字段值?,c#,C#,比如说,classA有私有字段A、B、C、D、E。。我想在classA中构建一个私有(我相信我不能做public?)方法StringToProperty,以便StringToProperty(“a”)首先返回a.,确保它可以是一个公共方法。如果你认为这个方法不能是公共的,因为它调用的东西是私有的,那是不准确的。将公共方法/属性视为底层私有成员的受控窗口 因此,要检索属性,可以使用反射 public string StringToProperty(string fieldName) { Typ

比如说,
classA
有私有字段A、B、C、D、E。。我想在
classA
中构建一个私有(我相信我不能做public?)方法
StringToProperty
,以便
StringToProperty(“a”)
首先返回a.

,确保它可以是一个公共方法。如果你认为这个方法不能是公共的,因为它调用的东西是私有的,那是不准确的。将公共方法/属性视为底层私有成员的受控窗口

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

public string StringToProperty(string fieldName)
{
  Type myType = this.GetType();
  FieldInfo field = myType.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
  return Convert.ToString(field.GetValue(this)); 
}
查看此处了解更多信息:


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

你可以通过反射来做到这一点,但实际上,一个在课堂之外的人甚至不应该真正知道内部字段是什么,因为他们可以在没有知识的情况下改变。