我有一个带签名的递归函数
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你的功能的本质.
一种选择是使用 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)
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |