如何在 C# 中的递归函数中添加不可访问的参数?

How do I add inaccessible parameters in a recursive function in c#?

我正在尝试编写一个带有必要参数的递归函数,但我不想在调用该函数时使用某些参数。

而且我知道如何制作可选参数,但我仍然想知道是否可以制作类似 'private parameter':

的东西

例如,一个函数 returns 值是一个乘以 10 的数字:

static int foo(int par, private int count = 0)
{
    if (count == 9)
    {
        return par;
    }
    return foo(par, count + 1) * par;
}

在函数 foo 中,我希望参数 'count' 不可访问或私有。

您不能将方法调用中的参数设为私有,只能将整个方法设为私有。通过一些重载,这是可能的:

你可以这样做:

private static int foo(int par, int count = 0)
{
    if (count == 9)
    {
        return par;
    }
    return foo(par, count + 1) * par;
}

public static int foo(int par)
{
    return foo(par, 0);
}

您可以使用内部委托(如 Func<int, int>)封装实际工作并使用闭包捕获 count(这将使您无需将 count 传递为一个参数):

static int foo(int par)
{
    int count = 0;
    Func<int, int> f = null;

    f = x =>
    {
        if (count == 9)
            return par;

        count++;
        return f(x) * x;
    };

    return f(par);
}