动态传递条目到需要参数的方法

时间:2011-10-18 08:55:53

标签: c# iterator 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并附加下一个参数。

谢谢,

丹尼斯

3 个答案:

答案 0 :(得分:1)

你可以这样做:

DoStuff(pList.Concat(new[]{ new Parameter("@d", "dddd!"), new Parameter("@e", "eeee!"}).ToArray());

答案 1 :(得分:0)

据我所知,params关键字需要数组作为参数类型,然后您可以使用DoStuff(pList.ToArray());

您指定的定义应该是

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

或者我错过了一些新功能?

答案 2 :(得分:0)

出于兴趣,为什么需要使用Iterate / yield方法?

有没有理由说这不起作用?

static void Main(string[] args)
{
    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(pList.ToArray());
}

static void DoStuff(params Parameter[] parameters){ 

    foreach(var p in parameters)
    {
        //do something.
    }

}