C# 显示错误 'Delegate 'System.Func<...>' 不接受 1 个参数

Posted

技术标签:

【中文标题】C# 显示错误 \'Delegate \'System.Func<...>\' 不接受 1 个参数【英文标题】: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,我不确定为什么。谁能帮我解释一下?

【问题讨论】:

【参考方案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 并且不返回任何内容。

【讨论】:

以上是关于C# 显示错误 'Delegate 'System.Func<...>' 不接受 1 个参数的主要内容,如果未能解决你的问题,请参考以下文章

C# 委托(Delegate)

C#委托

C# 委托基本例子

在我的 C# 代码中显示错误“前一个 catch 子句已经捕获了这个或超类型 `System.Exception' 的所有异常”

c# Combobox 显示 System.Data.Datarowview 因为点

C#、Asp.Net Web 应用程序中出现奇怪的 System.***Exception 错误