2009-09-21 23 views
11

¿La palabra clave params no es realmente compatible con los métodos de extensión?C# utilizando params y métodos de extensión

He encontrado que cuando creo métodos de extensión con la palabra clave params, obtengo "Ningún método sobrecargado para X toma 2 argumentos". Intellisense reconoce el método de extensión e incluso sabe que necesita una matriz de objetos.

He aquí algunos ejemplos de código:

public static DalRow EasyRetrieveSingle(this DalRow dalRow, object[] parameters) 
{ 
    Dictionary<string, object> dic = new Dictionary<string, object>(); 
    for (int i = 0; i < parameters.Length; i += 2) 
     dic.Add(parameters[i].ToString(), parameters[i + 1]); 

    List<DalRow> list = DalRow.RetrieveByFieldValues(dalRow.Structure, null, dic).Cast<DalRow>().ToList(); 
    if (list.Count == 0) return null; 
    return list[0]; 
} 

He aquí algunos ejemplos de código que llama (en vano)

(new X()).EasyRetrieveSingle(1, 2); 
+4

funciona para mí. Parece que te faltan 'params' en tu fragmento de código. –

+0

¡Guau! Esto tiene que ser la cabeza fría. Mis disculpas por la pregunta. – Daniel

+0

Sin preocupaciones. Por favor, no cambies el título, tan avergonzado como sientas, ayudará a otras personas a buscar en Google el mismo problema – johnc

Respuesta

23

Parece que se está perdiendo la palabra clave params ...

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
8

Te echa en falta la palabra clave params en tu método declara ción.

public static DalRow EasyRetrieveSingle(
    this DalRow dalRow, params object[] parameters) 
          ↑ 

Esto compila y funciona perfectamente:

static class Extensions 
{ 
    public static void Test(this Program program, params object[] args) { } 
} 

class Program 
{ 
    static void Main() 
    { 
     new Program().Test(1, 5); 
    } 
} 
Cuestiones relacionadas