2009-09-21 16 views
11

Czy słowo kluczowe params naprawdę nie jest obsługiwane w ramach metod rozszerzeń?C# przy użyciu params i metod rozszerzenia

Odkryłem, że gdy tworzę metody rozszerzania za pomocą słowa kluczowego params, otrzymuję "Brak przeciążonej metody dla X ma 2 argumenty". Intellisense rozpoznaje metodę rozszerzenia, a nawet wie, że potrzebuje tablicy obiektów.

Oto niektóre przykładowy kod:

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

Oto niektóre przykładowy kod, który wywołuje go (bezskutecznie)

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

pracuje dla mnie. Wygląda na to, że brakuje ci "params" we fragmencie kodu? –

+0

Wow! To musi być cholernie zimno. Moje przeprosiny za pytanie. – Daniel

+0

Bez obaw. Proszę nie zmieniać tytułu, ponieważ czujecie się zawstydzeni, ponieważ pomoże to innym osobom googlować w tym samym problemie – johnc

Odpowiedz

23

Wygląda jakbyś brakuje słowa kluczowego params ...

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

Nie masz słowa kluczowego params w swojej metodzie declara tację.

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

To kompiluje i działa perfekcyjnie:

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

class Program 
{ 
    static void Main() 
    { 
     new Program().Test(1, 5); 
    } 
} 
Powiązane problemy