在递归函数中传递相同的值?

mpe*_*pen 5 c#

我有一个带签名的递归函数

public static string Recurse(string pattern, ObjectDict dict)
Run Code Online (Sandbox Code Playgroud)

价值dict永不改变.让我感到困扰的是,我应该随身携带几十个引用,并在每次再次调用函数时传递它.有没有解决的办法?

通过"永不改变",我的意思是在最初的通话之后.

abe*_*nky 10

引用非常轻量级,所以不要担心它.

如果你真的需要避免它(并且,我认为你没有),请考虑这样的事情:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您不再传递对同一字典的引用,只是总是访问成员对象.但是,你现在已经失去了static你的功能的本质.


Jar*_*Par 2

一种选择是使用 lambda 表达式来保存函数的实际逻辑Recurse。然后可以递归地调用它,因为它是一个 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);
}
Run Code Online (Sandbox Code Playgroud)