C#中的可选参数,引用其他参数

Cha*_*adF 0 c#

我正在尝试在C#中编写一个递归函数,它将采用两个参数,一个数组和一个索引.索引应该在每次递归时更改,但是从Array的长度开始 - 1.

像这样:

public static int[] UpArray(int[] num, int i = num.Length - 1) {...}
Run Code Online (Sandbox Code Playgroud)

但是,我不能引用num.我可以传递一个布尔值,说明这是否是第一次通过,并在代码中包含if子句.但我想知道是否有更优雅的方式.

Jon*_*eet 9

不,一个可选参数的默认值已经是一个常数.

您可以使用-1注释中建议的默认值,或将其设置为可为空的int并将其默认为null:

public static int[] UpArray(int[] num, int? index = null)
{
    int realIndex = index ?? num.Length - 1;
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者更好的是,只有两种方法:

public static int[] UpArray(int[] num)
{
    return UpArray(num, num.Length - 1);
}

private static int[] UpArray(int[] num, int index)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这假设您不希望外部调用者实际指定索引 - 您只想在递归调用上执行此操作.

不需要任何可选参数,整体API就是您真正想要的,而不是让实现细节透视.

  • @AnthonyPegram:我也是 - 只是在重新阅读问题并抓住"第一次通过"之后,它变得更加清晰了:) (2认同)