C# 在递归函数中传递相同的值?
我有一个带签名的递归函数C# 在递归函数中传递相同的值?,c#,C#,我有一个带签名的递归函数 public static string Recurse(string pattern, ObjectDict dict) dict的值永远不会更改。让我有点困扰的是,我必须携带几十个对它的引用,并在每次再次调用该函数时传递它。有办法解决这个问题吗 我所说的“永不改变”,是指在第一次调用之后。引用非常轻量级,所以不用担心。 如果你真的需要避免它(我不认为你这样做),考虑这样的事情: class MyClass { private ObjectDict m_di
public static string Recurse(string pattern, ObjectDict dict)
dict
的值永远不会更改。让我有点困扰的是,我必须携带几十个对它的引用,并在每次再次调用该函数时传递它。有办法解决这个问题吗
我所说的“永不改变”,是指在第一次调用之后。引用非常轻量级,所以不用担心。 如果你真的需要避免它(我不认为你这样做),考虑这样的事情:
class MyClass
{
private ObjectDict m_dict;
public string Recurse(string pattern, ObjectDict dict)
{
m_dict = dict;
return HelperRecurse(pattern);
}
private string HelperRecurse(string pattern)
{
// do some work. (referring to m_dict)
HelperRecurse(pattern); // Go recursive
return "Hello World";
}
}
通过这样做,您不再传递对同一字典的引用,而是始终访问成员对象。但是,您现在已经失去了函数的
静态
特性。好吧,如果可以的话,可以将递归
作为ObjectDict
上的一个实例方法。然后您可以在内部调用Recurse(pattern)
如果出于任何原因,这是不可能的,不要担心。事实上,这两个选项非常相似——例如方法,实际上有一个不可见的“this”参数,它首先传递,然后再传递其余的参数。您正好把自己的放在了另一端:)一个选项是使用lambda表达式来保存
递归
函数的实际逻辑。然后可以递归调用它,因为它是lambda,所以它可以访问dict
对象,而不必传递它
public static string Recurse(string initialPattern, ObjectDict dict) {
Func<string, string> inner = null;
inner = pattern => {
// Logic which uses calls to inner for recursion. Has access to dict
// because it's a lambda. For example
if (dict.SomeOperation()) {
return inner(someOtherPattern);
}
return aValue;
};
return inner(initialPattern);
}
公共静态字符串递归(字符串初始模式,ObjectDict dict){
Func-inner=null;
内部=模式=>{
//使用内部调用进行递归的逻辑。可以访问dict
//因为它是lambda。例如
if(dict.SomeOperation()){
返回内部(其他模式);
}
返回值;
};
返回内部(初始模式);
}
ObjectDict
只是字典
,因为我懒得到处键入:)哈哈。。。最近出现了一个问题,关于lambda在什么时候有用,我认为它们永远不会有用,除非用作函数的参数……当然向我展示了:p可能会这样做。谢谢:D