c# - 确保 lambda 表达式指向类的实际属性?

标签 c# reflection lambda expression .net-4.5

有什么方法可以确保我只能传入指向 a 类上的属性的表达式吗?

public class Foo
{
    public string Bar { get; set; }

    public void DoSomething()
    {
        HelperClass.HelperFunc(() => Bar);
    }
}

public static class HelperClass
{
    public static void HelperFunc(Expression<Func<string>> expression)
    {
        // Ensure that the expression points to a property
        // that is a member of the class Foo (or throw exception)
    }
}

此外,如果需要,我也可以更改签名以传递实际的类...

最佳答案

这里是扩展方法,它将 lambda 转换为属性。如果 lambda 没有指向属性,则抛出异常

public static PropertyInfo ToPropertyInfo(this LambdaExpression expression)
{
    MemberExpression body = expression.Body as MemberExpression;
    if (body != null)
    {
        PropertyInfo member = body.Member as PropertyInfo;
        if (member != null)
        {
            return member;
        }
    }
    throw new ArgumentException("Property not found");
}

关于c# - 确保 lambda 表达式指向类的实际属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019049/

相关文章:

C# 'Enumerable.Repeat()'如何重载?

c# - CaSTLe 项目每个 session 生活方式与 ASP.NET MVC

c# - 统一点击检测游戏对象

iphone - 如何在反射 UIImageView (带有变化的图片)时摆脱以前的反射?

java - 理解 Guava 的 TypeToken.isAssignableFrom 方法

c# - LINQ 中的普通 lambda

LINQ 查询中的 C# lambda 表达式

c# - MSIL 或 native 代码中的 "Unreachable code detected"

java - 通过成员注解获取外部类

java - 如何将此Java代码转换为Lambda和Stream实现?