Lambda 在传递 属性 时不是 属性 类型

Lambda not a property type when passing property

我有以下 class:

public class Errors<T> : Errors
{
    public void Add(Expression<Func<T>> property, string message)
    {
        base.Add(((MemberExpression)property.Body).Member.Name, message);
    }
}

然后我尝试像这样调用:

Errors<User> e = new Errors<User>();
e.Add(x => x.Name, "Name must be entered.");

当我尝试编译时,出现以下错误:

Cannot convert lambda expression to type 'string' because it is not a delegate type

我的定义哪里错了?错误发生在 e.Add 方法调用上,而不是在重载上。

您在重载中指定了 Func<T>,它不应该带任何参数和 return T(在本例中为 User)。您正在传递一个看起来更像 Func<T, object> 的 lambda - 它接受一个 T 参数和 returns something.

我想你的 Errors 基础 class 有这样的功能:

public class Errors{    
    public void Add(string propertyName, string message) {
        // implementation here
    }    
}

这就是错误所指的内容。它试图将您的 lambda 与该重载的参数相匹配,因为它与您在通用 class 的重载中指定的 Func<T> 不匹配。

所以,我认为你的重载应该是:

public void Add(Expression<Func<T, object>> property, string message)