动态地将条目传递给需要参数的方法
本文关键字:参数 方法 动态 | 更新日期: 2023-09-27 18:11:28
我目前有以下需要参数的方法-我不能改变这个方法的定义:
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
并附加下一个参数来工作。
谢谢,丹尼斯
你可以这样做:
DoStuff(pList.Concat(new[]{ new Parameter("@d", "dddd!"), new Parameter("@e", "eeee!"}).ToArray());
据我所知,params
关键字需要数组作为参数类型,那么您可以使用DoStuff(pList.ToArray());
。
你指定的定义应该是
public static DoStuff(params Parameter[] p){ /* ... */ }
还是我错过了一些新功能?
出于兴趣,为什么需要使用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.
}
}