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

Har*_*old 12 c# asp.net-mvc lambda

我打电话给:

        form = new FormFor<Project>()
            .Set(x => x.Name, "hi");
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但它一直告诉我Delegate 'System.Func<ProjectSupport.Core.Domain.Project>' does not take 1 arguments,我不确定为什么.有人能为我解释一下吗?

Jon*_*eet 20

它试图转换这个lambda表达式:

x => x.Name
Run Code Online (Sandbox Code Playgroud)

变成一个Expression<Func<TEntity>>.

让我们暂时忽略表达式树位 - 委托类型Func<TEntity>表示一个不带参数的委托,并返回一个TEntity.你的lambda表达式x => x.Name显然需要一个参数(x).我怀疑你想要

Expression<Func<TEntity, string>>
Run Code Online (Sandbox Code Playgroud)

或者类似的东西,但是你要做的事情并不是很清楚.


小智 5

表达式 "x => x.Name" 的类型不是Expression<Func<TEntity>>,而是Expression<Func<TEntity, string>>。我想,您应该更改 Set 方法的声明:

public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value)
Run Code Online (Sandbox Code Playgroud)