C#显示错误'委托'System.Func< ...>'不带1个参数

时间:2011-03-02 13:33:40

标签: c# asp.net-mvc lambda

我在打电话:

        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,我不确定为什么。有人能为我解释一下吗?

3 个答案:

答案 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并且不返回任何内容。