我在打电话:
form = new FormFor<Project>()
.Set(x => x.Name, "hi");
其中Project有一个名为Name的字段,FormFor的代码是:
public class FormFor<TEntity> where TEntity : class
{
FormCollection form;
public FormFor()
{
form = new FormCollection();
}
public FormFor<TEntity> Set(Expression<Func<TEntity>> property, string value)
{
form.Add(property.PropertyName(), value);
return this;
}
}
但它一直告诉我Delegate 'System.Func<ProjectSupport.Core.Domain.Project>' does not take 1 arguments
,我不确定为什么。有人能为我解释一下吗?
答案 0 :(得分:20)
它试图转换这个lambda表达式:
x => x.Name
加入Expression<Func<TEntity>>
。
让我们暂时忽略表达式树位 - 委托类型Func<TEntity>
表示不带参数的委托,并返回TEntity
。您的lambda表达式x => x.Name
显然 期待参数(x
)。我怀疑你想要
Expression<Func<TEntity, string>>
或类似的东西,但是你要做的事情并不是很清楚。
答案 1 :(得分:4)
表达式“x =&gt; x.Name”不是Expression<Func<TEntity>>
,而是Expression<Func<TEntity, string>>
。我想,你应该改变Set方法的声明:
public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value)
答案 2 :(得分:2)
Func<TEntity>
是一个接受零参数的委托,并返回类型为TEntity
的对象。您正在尝试提供x
并且不返回任何内容。