我有以下课程:
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
方法调用上,而不是在重载上。
答案 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)