如何在 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);
}
我正在尝试编写一个带有必要参数的递归函数,但我不想在调用该函数时使用某些参数。
而且我知道如何制作可选参数,但我仍然想知道是否可以制作类似 '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);
}