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。

为什么?

c#将参数从一个例程传递到另一个例程

使用以下示例,我根本看不到这种行为:

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]没有任何值吗?