我目前正在使用以下需要参数的方法 - 我无法更改此方法定义:
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
并附加下一个参数。
谢谢,
丹尼斯
答案 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.
}
}