c# - 如何获取特定属性的 PropertyInfo?

标签 c# reflection

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

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

但必须有一种方法可以做类似

的事情
typeof(MyProperty) as PropertyInfo

有吗?还是我一直在进行类型不安全的字符串比较?

干杯。

最佳答案

有一个 .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();
        }
    }
}

关于c# - 如何获取特定属性的 PropertyInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491429/

相关文章:

c# - Automapper:从自动映射对象解析源属性名称

haskell - 如何在 Haskell 中将类型作为字符串获取?

C# LINQ - 将类的所有属性与同一类的不同实例进行比较的 Select 语句?

golang DeepEqual 和 Reflect.Zero

c# - 使用 LINQ 将元素读入字典对象

c# - 为什么 cookie.domain 设置两个 cookie?

c# - asp.net mvc 如何将 View 与 Controller 操作相关联?

c# - 如何在 MediaPlayer 中播放来自 SpeechSynthesizer 的 wav 文件

c# - 为什么 Method.Invoke 会生成未处理的异常?即使使用 TargetInitationException 也无法捕获

java - 转换为在运行时确定的类