获取强类型的类方法的名称(使用lambda表达式)

时间:2014-06-24 07:26:57

标签: c# lambda

一旦我在一个正在研究的项目上找到了一个非常棒的方法,我可以用它来获取一个类的属性的名称,强类型,在重构或查找引用时它真的很方便。 代码的缺点是我真的不明白它是如何工作的,通常我很反感,但在这种情况下我会接受它。

代码是这样的:

public static class ObjectHelper<T>
{
    public static string GetPropertyName<TProp>(Expression<Func<T, TProp>> expr)
    {
        var node = expr.Body as MemberExpression;

        if (ReferenceEquals(null, node))
        {
            throw new InvalidOperationException("Expression must be of member access");
        }

        return node.Member.Name;
    }
}

我可以在类CompanyPersonProfileViewModel的类CountryId上使用它,如下所示:

string s = ObjectHelper<CompanyPersonProfileViewModel>.GetPropertyName(z => z.CountryId);

无论如何,因为我不知道它是如何工作的(如果你这样做,我也会喜欢这个解释),我不知道如何根据我的其他愿望调整代码:get强类型方法的名称。

所以当我有同一个类和一个名为GetAllCountries()的方法时,我可以输入:

string s = ObjectHelper<CompanyPersonProfileViewModel>.GetMethodName(z => z.GetAllCountries);

(或类似的东西)

0 个答案:

没有答案