Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态地将条目传递给需要参数的方法_C#_Iterator_Params - Fatal编程技术网

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

C# 动态地将条目传递给需要参数的方法,c#,iterator,params,C#,Iterator,Params,我当前有以下需要参数的方法-我无法更改此方法定义: public static DoStuff(params Parameter[] p){ /* ... */ } 我不知道在运行时会有多少个参数,所以我想传递一个数组或一个列表-我考虑过使用如下迭代器: List<Parameter> pList = new List<Parameter>(); pList.Add(new Parameter("@a", "aaaa!"); pList.Add(new Paramete

我当前有以下需要参数的方法-我无法更改此方法定义:

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));
DoStuff(Iterate(pList), new Parameter("@d", "dddd!"));
我这样做只是出于好奇,想看看它是否有效——但这并不是简单地通过将我的
列表
强制转换为
数组
并附加下一个参数就能做到的

谢谢


Dennis

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

您指定的定义应该是

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

还是我错过了一些新功能?

出于兴趣,为什么需要使用迭代/屈服方法

这有没有一个不起作用的原因

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.
    }

}
static void Main(字符串[]args)
{
List pList=新列表();
添加(新参数(“@a”,“aaaa!”);
添加(新参数(“@b”,“bbbb!”);
添加(新参数(“@c”,“cccc!”);
DoStuff(pList.ToArray());
}
静态void DoStuff(参数[]参数){
foreach(参数中的var p)
{
//做点什么。
}
}

您可以这样做:

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

是的,你是对的,它是参数[]-我改变了我原来的解决方案,使它更容易一点,但忘了添加它。换了。不过,仅仅传递数组是不起作用的。它应该起作用的,请尝试创建自己的方法
Test(params myType[]p)
并调用
Test(new List(){…}.ToArray())
-错误消息是编译器错误还是运行时错误?DoStuff(..)是否有两个重载?一个用于参数数组,一个用于参数数组加单个参数?
DoStuff(pList.Concat(new[]{ new Parameter("@d", "dddd!"), new Parameter("@e", "eeee!"}).ToArray());