c#将参数从一个例程传递到另一个例程
本文关键字:例程 一个 另一个 参数 | 更新日期: 2023-09-27 18:01:08
问这个问题最简单的方法是通过一个例子向大家展示——所以我开始了!
private void exampleVoid(string someString, params string[] someArray_string)
{
// Do some dirty work
for(int i = 0; i < someArray_string.length; i++)
{
Console.WriteLine(someArray_string[i]);
}
// Recall the routine
exampleVoid("some string", someArray_string)
}
当我在例程底部重新传递数组时,数据没有正确通过。数组的长度现在为0。
为什么?
使用以下示例,我根本看不到这种行为:
class Program
{
static void Main( string[] args )
{
Foo( 5, "one", "two", "three" );
Console.ReadLine();
}
static void Foo( int counter, params string[] parms )
{
if( counter <= 0 ) return;
foreach( var str in parms )
{
Console.WriteLine( str );
}
Foo( --counter, parms );
}
}
您是如何在第一次递归调用后确定someArray_string
为空的?您正在使用调试器吗?你在哪里调用这个函数?你向它传递了什么参数?你真的在传递字符串作为第二个。。。最后一个参数,即,您是否向该方法传递了多个参数?
此外,您最终只会使用StackOverflowException
崩溃,因为除了递归调用外,您永远不会从函数返回。电话从未停止,这可能是你认为完全是另一个问题的原因吗?
如何/何时初始化someArray_string?您什么时候向该数组添加任何内容?据我所知,您只是在一个空数组中循环,并将其空元素写入控制台。
您确定没有从方法内的数组中删除或修改任何数据吗?由于数组将通过引用传递。
我试过这个例子,它正如预期的那样。。。所以,我想知道"重加工"到底是什么。。。
我也遇到过类似的问题,不得不放弃这种方法。
params关键字允许该方法采用变量参数列表。当您再次调用该方法时,发送到下一个调用中的"someArray_string"仅作为一个参数而不是数组接收。在第二次调用中,someArray_string[0]没有任何值吗?