C# 获取对私有成员名称的直接引用,而不是使用字符串

C# 获取对私有成员名称的直接引用,而不是使用字符串,c#,reference,private,member,C#,Reference,Private,Member,我正在使用一个库,它要求我传递我的私人成员的名字,大概是为了让它可以在内部进行一些反射: m_MaterialsProp = serializedObject.FindProperty("m_Materials"); 当我重构并移动东西时,确保这些字符串保持正确就成了一场噩梦 我是否可以获得对私有成员的安全引用,并将成员名称传递给函数?您可以在这里采取的一种方法(不显示任何代码,您必须自己查找)是对要与此库一起使用的字段使用自定义注释 然后,您可以使用Reflection查找类中包含注释的所有

我正在使用一个库,它要求我传递我的私人成员的名字,大概是为了让它可以在内部进行一些反射:

m_MaterialsProp = serializedObject.FindProperty("m_Materials");
当我重构并移动东西时,确保这些字符串保持正确就成了一场噩梦


我是否可以获得对私有成员的安全引用,并将成员名称传递给函数?

您可以在这里采取的一种方法(不显示任何代码,您必须自己查找)是对要与此库一起使用的
字段使用自定义
注释

然后,您可以使用
Reflection
查找类中包含
注释的所有
字段。这样,如果更改实际字段的名称,注释将保持不变,并且仍然可以找到字段

将类作为参数的实用程序方法可以为您提供该类所需的所有字段。

公共字符串GetMemberName(Expression memberExpression)
public string GetMemberName<T>(Expression<Func<T>> memberExpression)
    {
        MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
        return expressionBody.Member.Name;
    }
{ MemberExpression expressionBody=(MemberExpression)MemberExpression.Body; 返回expressionBody.Member.Name; }
means-如果此属性确实存在,是否需要静态(编译时)验证?我相信这是不可能的…你能演示一下用法吗?不起作用,你不能使用私有字段访问作为表达式。我最终使用了以下内容:公共字符串materialsMemberName{get{return GetMemberName(()=>m_Materials);}}}公共静态字符串GetMemberName(expression memberExpression){return(memberExpression.Body作为memberExpression).Member.Name;}