c# - 如何获取给定类型的强类型属性名称?

标签 c# .net reflection expression-trees

<分区>

我希望能够使用强类型语法检索某个类型的属性名称。 我已经有一个函数来获取实例的属性名称:

public static string PropertyName<T, TReturn>(this T obj, Expression<Func<T, TReturn>> property) where T : class 
{
    MemberExpression body = (MemberExpression) property.Body;
    if (body == null) throw new ArgumentException("The provided expression did not point to a property.");       
    return body.Member.Name;
}

可以这样调用:

Car car = new Car();
car.PropertyName(x => x.Wheels) //returns "Wheels"

我正在尝试创建另一个可以支持以下内容的函数:

Type t = Typeof(Car);
t.PropertyName(x => x.Wheels) //should return "Wheels"

或者只是(甚至更好!):

Car.PropertyName(x => x.Wheels)

我该怎么做?

最佳答案

您可以重写您的方法以在不创建实例的情况下使用它:

var prop = ReflectionHelper.PropertyName<Car>(x => x.Wheels);

因为你没有在里面使用 obj 因为你不需要它:

public static class ReflectionHelper
{
    public static string PropertyName<T>(Expression<Func<T, object>> property) where T : class 
    {
        MemberExpression body = (MemberExpression)property.Body;
        return body.Member.Name;
    }
}

请注意,返回类型不必是强类型的,它可以只是object

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

相关文章:

c# - Resharper "join declaration and assignment"不转换为 "var"

.net - 从程序内部管理 HTTPS 服务器证书?

c# - GAC(全局程序集缓存)位于何处?它有什么用?

java - 如何读取类中字段的运行时注释

java - 如何获取调用静态方法的类?

c# - 将 Linux 日期时间转换为 Windows 本地日期时间格式

c# - SQL 中的 "Dynamic"表?

c# - 如何获取有关最近连接的 USB 设备的信息?

java - 是否可以通过中间人攻击将代码注入(inject)通过网络传输的 Java 对象?

c# - 使用 linq 读取属性值