4

我遇到了optional parameters问题recursive functions

这是一个示例代码:

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, optional++);
}

调用函数时:

RecursiveFunction(0);

我得到了以下结果(只需string.Format("{0} - {1}", x, optional)在即时窗口中调用此代码):

"0 - 0"
"1 - 0"
"2 - 0"
"3 - 0"
"4 - 0"

我在这里错过了什么吗?谢谢!

4

5 回答 5

8

更改自:

RecursiveFunction(x + 1, optional++);
//                               ^^

至:

RecursiveFunction(x + 1, ++optional);
//                       ^^

第一个执行操作,然后递增optional
第二个在递增后执行操作optional

来自MSDN

++ var
var ++

第一种形式是前缀递增操作。操作的结果是操作数增加后的值。

第二种形式是后缀递增操作。操作的结果是操作数在递增之前的值。

于 2012-11-12T07:57:12.607 回答
3

你先跟注RecursiveFunction,然后再增加optional。你需要先增加它。

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, ++optional);
}
于 2012-11-12T07:57:38.337 回答
3

您需要在调用之前递增

RecursiveFunction(x + 1, ++optional);
于 2012-11-12T07:58:34.310 回答
1

在您的方法调用中使用++optional而不是。optional++

通过使用optional++,您不会将增量值作为参数传递给函数,而是0传递给每个函数调用。你的电话应该是:

RecursiveFunction(x + 1, ++optional);
于 2012-11-12T07:57:20.297 回答
1

是的,

你需要做++optional而不是optional++

于 2012-11-12T07:57:48.370 回答