【问题标题】:Get the property name of a property of an anonymous type from an expression从表达式中获取匿名类型属性的属性名
【发布时间】:2017-07-13 20:55:21
【问题描述】:

以下代码适用于常规类型:

    public static string GetPropertyName(this Expression<Func<object>> property)
    {
        MemberExpression member = property.Body as MemberExpression;
        PropertyInfo propInfo = member.Member as PropertyInfo;
        return propInfo.Name;
    }

    GetPropertyName(() => obj.MyProperty); //Returns "MyProperty"

但是,如果您将匿名类型的属性传递给它,它会引发空引用异常,因为表达式主体是 UnaryExpression 而不是 MemberExpression。

我怎样才能使这个函数对匿名类型正常工作?

【问题讨论】:

    标签: c# .net lambda expression


    【解决方案1】:

    表达式主体是UnaryExpression 不是因为匿名类型,而是因为属性是值类型,需要为您的Expression&lt;Func&lt;object&gt;&gt; 装箱为object;见this answer

    您可以通过将方法签名更改为采用泛型类型参数来避免这种情况:

    public static string GetPropertyName<T>(this Expression<Func<T>> property)
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2010-10-26
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      相关资源
      最近更新 更多