动态地将条目传递给需要参数的方法

本文关键字:参数 方法 动态 | 更新日期: 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.
    }
}