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)
我有以下 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)