如何获取特定属性的PropertyInfo?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我想获得特定属性的PropertyInfo。我可以用:

foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
    if ( p.Name == "MyProperty") { return p }
}

但一定有办法做类似的事

typeof(MyProperty) as PropertyInfo

有吗?还是我被困在了一个字符串比较中?

提问于
用户回答回答于

你可以使用nameof()属于C#6并且可在Visual Studio 2015中使用的新运算符。

对于你的例子,你可以使用:

PropertyInfo result = typeof(MyObject).GetProperty(nameof(MyObject.MyProperty));

用户回答回答于

有一个.NET 3.5的lambdas/的方法Expression不使用字符串

using System;
using System.Linq.Expressions;
using System.Reflection;

class Foo
{
    public string Bar { get; set; }
}
static class Program
{
    static void Main()
    {
        PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar);
    }
}
public static class PropertyHelper<T>
{
    public static PropertyInfo GetProperty<TValue>(
        Expression<Func<T, TValue>> selector)
    {
        Expression body = selector;
        if (body is LambdaExpression)
        {
            body = ((LambdaExpression)body).Body;
        }
        switch (body.NodeType)
        {
            case ExpressionType.MemberAccess:
                return (PropertyInfo)((MemberExpression)body).Member;
            default:
                throw new InvalidOperationException();
        }
    }
}

扫码关注云+社区