【问题标题】:C# displaying error 'Delegate 'System.Func<...>' does not take 1 argumentsC# 显示错误 'Delegate 'System.Func<...>' 不接受 1 个参数
【发布时间】:2011-07-07 07:00:03
【问题描述】:

我在打电话:

        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&lt;ProjectSupport.Core.Domain.Project&gt;' does not take 1 arguments,我不确定为什么。谁能帮我解释一下?

【问题讨论】:

    标签: c# asp.net-mvc lambda


    【解决方案1】:

    它正在尝试转换这个 lambda 表达式:

    x => x.Name
    

    转为Expression&lt;Func&lt;TEntity&gt;&gt;

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

    Expression<Func<TEntity, string>>
    

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

    【讨论】:

      【解决方案2】:

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

      public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value)
      

      【讨论】:

        【解决方案3】:

        Func&lt;TEntity&gt; 是一个接受零参数的委托,并返回一个 TEntity 类型的对象。您正在尝试提供 x 并且不返回任何内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-22
          • 1970-01-01
          • 1970-01-01
          • 2013-03-26
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多