2014-02-06 241 views
1

我需要获取静态属性的属性名称作为参数动态调用。 这里是我的移植类库代码:反射:获取静态属性名称

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 
     } 
    } 

我不知道属性的名称,我不想有额外的字符串定义它。

回答

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或更复杂的东西,并报告错误。

+1

为了扩展,在这个问题中接受的答案显示了如何检查表达式以及如何调用GetPropName方法的示例:http://stackoverflow.com/questions/1011109/how-do-you-get-the - 名称的属性 –

+0

@DavidKhaykin - 谢谢 - 我已经链接/内联示例。 –

+0

也许在.Net将来发布! – Alphapage