2011-03-02 33 views
9

我打电话:C#显示错误“委托 'System.Func <...>' 不拿1个参数

 form = new FormFor<Project>() 
      .Set(x => x.Name, "hi"); 

,其中工程有一个叫做名称和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,我不确定为什么。任何人都可以为我解释一下吗?

回答

18

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

x => x.Name 

Expression<Func<TEntity>>

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

Expression<Func<TEntity, string>> 

或类似的东西,但它不是很清楚你想要做什么。

+0

这是正确的,谢谢你的解释:) – Harold 2011-03-02 13:48:31

1

Func<TEntity>是一个采用零参数的代表并返回一个TEntity类型的对象。您正尝试提供x,并且不会返回任何内容。

3

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

public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value) 
相关问题