C # при отображении ошибки «Делегат» System.Func <...> 'не принимает 1 аргумента - PullRequest
12 голосов
/ 02 марта 2011

Я звоню:

        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<ProjectSupport.Core.Domain.Project>' does not take 1 arguments, и я не уверен, почему,Может ли кто-нибудь пролить свет на это для меня?

Ответы [ 3 ]

20 голосов
/ 02 марта 2011

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

x => x.Name

в Expression<Func<TEntity>>.

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

Expression<Func<TEntity, string>>

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

4 голосов
/ 02 марта 2011

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

public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value)
2 голосов
/ 02 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...