我需要获取动态调用为参数的静态属性的属性名称。 这是我的可移植类库代码:
public partial class Test
{
public Test()
{
string staticPropName = Test.GetPropName(Test.Row); // result must be "Row" without additional string
System.Diagnostics.Debug.WriteLine("propName=" + staticPropName);
}
public static int Row { get; set; }
public static string GetPropName(object Property)
{
return "Row"; // using reflection
}
}
我不知道属性的名称,我不想用额外的字符串来定义它。
答案 0 :(得分:6)
你不能这样做 - 当调用函数时,它获取属性的值,并且不知道这个值来自何处。您的样本等同于
string staticPropName = Test.GetPropName(42);
没人会指望返回名字。
您可以尝试将Expression
作为参数,这样您就可以实际检查调用哪个方法,如下面的注视点(https://stackoverflow.com/questions/1011109/how-do-you-get-the-name-of-the-property):
public static string GetPropName<TResult>(Expression<Func<TResult>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
string staticPropName = Test.GetPropName(()=> Test.Prop);
请注意,您需要进行检查,以确保表达式只是您期望的表达式,而不是() => Test + 42
或更复杂的表达式,并报告错误。