C# отображение ошибки "делегировать" систему.Func ' не принимает 1 аргументов

Я призываю:

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

где проект имеет поле с именем 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 ответов


он пытается преобразовать лямбда-выражение:

x => x.Name

на Expression<Func<TEntity>>.

давайте проигнорируем бит дерева выражений на данный момент-тип делегата Func<TEntity> представляет делегат, который не принимает никаких аргументов и возвращает TEntity. Ваше лямбда-выражение x => x.Name явно и ожидание параметра (x). Я подозреваю, что вы хотите

Expression<Func<TEntity, string>>

или что-то подобное, но это не совсем ясно, что вы пытаетесь сделать.


тип выражения " x => x.Имя " не Expression<Func<TEntity>>, а Expression<Func<TEntity, string>>. Я думаю, вы должны изменить объявление метода:

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

Func<TEntity> - Это делегат принимает нулевые параметры и возвращает объект типа TEntity. Вы пытаетесь поставить x и ничего не вернуть.