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

时间:2015-01-16 00:22:09

标签: c# lambda

我有以下课程:

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方法调用上,而不是在重载上。

1 个答案:

答案 0 :(得分:2)

您已在重载中指定了Func<T>,该参数不应参数并返回T(在本例中为User)。您传递的lambda看起来更像Func<T, object> - 它接受T参数并返回某些内容

我想你的Errors基类有这样的函数:

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

错误正在谈论的是什么。它试图将您的lambda与该重载的参数进行匹配,因为它与您在泛型类的重载中指定的Func<T>不匹配。

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

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