2011-03-02 10 views
9

estoy llamando:C# despliegue de errores 'delegado 'System.Func <...>' no toma 1 argumentos

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

donde Proyecto tiene un campo llamado Nombre y de FormFor código es:

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; 
    } 
} 

pero me sigue diciendo Delegate 'System.Func<ProjectSupport.Core.Domain.Project>' does not take 1 arguments y no estoy seguro de por qué. ¿Alguien podría arrojar algo de luz sobre mí?

Respuesta

18

que está tratando de convertir esta expresión lambda:

x => x.Name 

en un Expression<Func<TEntity>>.

Vamos a ignorar el bit del árbol de expresiones por el momento - el tipo de delegado Func<TEntity> representa un delegado que no toma argumentos, y devuelve un TEntity. Su expresión lambda x => x.Name claramente es esperando un parámetro (x). Sospecho que quiere

Expression<Func<TEntity, string>> 

o algo similar, pero no está muy claro lo que está tratando de hacer.

+0

Así es, y gracias por la explicación también :) – Harold

1

Func<TEntity> es un delegado que toma cero parámetros y devuelve un objeto del tipo TEntity. Está tratando de suministrar un x y no devuelve nada.

3

Tipo de expresión "x => x.Name" no es Expression<Func<TEntity>>, pero Expression<Func<TEntity, string>>. Supongo que debe cambiar la declaración del método Set:

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