2009-09-21 9 views
11

Le mot-clé params n'est-il pas réellement pris en charge dans les méthodes d'extension?C# utilisant des paramètres et des méthodes d'extension

J'ai trouvé que lorsque je crée des méthodes d'extension avec le mot-clé params, j'obtiens «Aucune méthode surchargée pour X prend 2 arguments». Intellisense reconnaît la méthode d'extension et sait même qu'elle a besoin d'un tableau d'objets.

Voici quelques exemples de code:

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

Voici quelques exemples de code qu'il appelle (en vain)

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

Works pour moi. Il semble que vous manquiez 'params' dans votre extrait de code? –

+0

Wow! Cela doit être la tête fringale froide. Mes excuses pour la question. – Daniel

+0

Pas de soucis. S'il vous plaît ne changez pas le titre, aussi embarrassé que vous le sentez, cela aidera d'autres personnes à googler le même problème – johnc

Répondre

23

On dirait que vous êtes absent le mot-clé params ...

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

Il vous manque le mot-clé params dans votre déclaration de méthode tion.

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

Ceci compile et fonctionne parfaitement:

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

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