C # с использованием параметров и методов расширения - PullRequest
11 голосов
/ 22 сентября 2009

Действительно ли ключевое слово params не поддерживается в методах расширения?

Я обнаружил, что когда я создаю методы расширения с ключевым словом params, я получаю сообщение: «Никакой перегруженный метод для X не принимает 2 аргумента». Intellisense распознает метод расширения и даже знает, что ему нужен массив объектов.

Вот пример кода:

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

Вот пример кода, который его вызывает (безрезультатно)

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

Ответы [ 2 ]

25 голосов
/ 22 сентября 2009

Похоже, вам не хватает ключевого слова params ...

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
8 голосов
/ 22 сентября 2009

В вашем объявлении метода отсутствует ключевое слово params.

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

Это прекрасно компилируется и работает:

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

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