Динамически передавать записи в метод, требующий params - PullRequest
0 голосов
/ 18 октября 2011

В настоящее время у меня есть следующий метод, который требует params - я не могу изменить определение этого метода:

public static DoStuff(params Parameter[] p){ /* ... */ }

Я не знаю, сколько параметров у меня будет во время выполнения, поэтому я хочу передать массив или список - я думал об использовании итераторов, например:

List<Parameter> pList = new List<Parameter>();
pList.Add(new Parameter("@a", "aaaa!");
pList.Add(new Parameter("@b", "bbbb!");
pList.Add(new Parameter("@c", "cccc!");
DoStuff(Iterate(pList));

А вот итерационный метод:

public static IEnumerator<Parameter> Iterate(List<Parameter> pList)
    {
        foreach (Parameter p in pList)
            yield return p;
    }

К сожалению, он не работает, он постоянно говорит мне, что не может привести (сгенерированный тип) к CommandParameter.

Буду признателен за любую помощь (или другие подходы)!

Редактировать: Оказывается, пытаясь упростить мое решение ради понимания моего вопроса, я тривиализировал свою проблему.

В дополнение к этому массиву, я хотел бы также передать «нормальные» параметры, такие как:

DoStuff(Iterate(pList), new Parameter("@d", "dddd!"));

Я делаю это просто из любопытства, чтобы посмотреть, работает ли он - но это не работает, просто приведя мой List к Array и добавив следующий параметр.

Спасибо

Dennis

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Вы можете сделать это так:

DoStuff(pList.Concat(new[]{ new Parameter("@d", "dddd!"), new Parameter("@e", "eeee!"}).ToArray());
0 голосов
/ 18 октября 2011

Из интереса, зачем вам нужно использовать метод итерации / yield?

Есть ли причина, по которой это не будет работать?

0 голосов
/ 18 октября 2011

Насколько я знаю, для ключевого слова params требуется массив в качестве типа параметра, и тогда вы можете использовать DoStuff(pList.ToArray());.

Хотя определение, которое вы указали, должно быть

public static DoStuff(params Parameter[] p){ /* ... */ }

Или я пропустил некоторые новые функции?

...