2012-03-26 26 views
23

Tengo un método para obtener valores de la base de datos.Parámetros nombrados con los parámetros

public virtual List<TEntity> GetValues(
      int? parameter1 = null, 
      int? parameter2 = null, 
      int? parameter3 = null, 
      params Expression<Func<TEntity, object>>[] include) 
     { 
      //... 
     } 

¿Cómo puedo llamar a esta función con un parámetro llamado a no escribir todos los parámetros antes de include? que quiero hacer algo como esto

var userInfo1 = Unit.UserSrvc.GetValues(include: p => p.Membership, p => p.User); 

Pero esto no parece funcionar? ¿Cómo puedo usar el parámetro nombrado con params?

+2

encontraron esta pregunta en un hilo de MSDN - parece que habría que nombrar cada argumento en la lista de params o algo así? http://bit.ly/GPZvkH –

+0

Gracias James. Por cierto, aún no se ha encontrado la respuesta ... Creo que todavía no se ha implementado en .NET. –

+0

@ChuckNorris, esto no tiene nada que ver con .Net, solo con C#. Otros lenguajes .Net pueden manejar 'params' y parámetros nombrados de manera diferente, por lo que lo que desea ya podría ser posible en otro idioma. Además, creo que no existe un "todavía": es poco probable que esto cambie en las versiones futuras de C#. – svick

Respuesta

12

I pensar que la única manera es algo así como:

GetValues(include: 
    new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User }) 

Que no es tan genial. Sería probablemente mejor si se ha añadido una sobrecarga para los que:

public List<Entity> GetValues(params Expression<Func<Entity, object>>[] include) 
{ 
    return GetValues(null, null, null, include); 
} 

Luego llama a su método como

GetValues(p => p.Membership, p => p.User) 
+0

De acuerdo con @svick - probablemente debería agregar un par de sobrecargas para sus escenarios de uso típicos. – VinayC

8

Un argumento params funciona como una matriz, tratar esta sintaxis:

var userInfo1 = Unit.UserSrvc.GetValues(include: new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User }); 

(Puede ser que necesite alguna adaptación debido al parámetro genérico, pero creo que se obtiene la esencia de la misma)

+5

Si lo hace de esta manera, no tiene sentido que se especifique la palabra clave 'params'. Esto no es diferente a tener una matriz simple como último argumento. El OP pregunta cómo hacerlo con 'params'. –

+1

Gracias por la respuesta, pero no es exactamente lo que quiero ... Rob Levine tiene razón, pero parece que no hay manera de hacer esto con params. –

+0

Oh, ya veo, entendí mal lo que necesitabas. Escribir sobrecargas es la única alternativa que veo, pero una vez más, eso no es lo que quieres ... – madd0

Cuestiones relacionadas