2011-03-02 34 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) 
相關問題