有没有办法在 CodeDom 的另一个方法中生成本地方法?

Is there a way to generate a local method within another method in CodeDom?

我正在使用 CodeDom 创建代码。但是,CodeDom 不支持 lambda 语句。所以我现在试图通过创建本地方法来模仿 lambda 语句,并将该方法作为参数传递给另一个方法。像这样:

public string MainMethod(string myParameter)
{
    string g() { return instance.MainMethod(myParameter); }
    return someOtherMethod(g);
}

方法 'MainMethod' 已经使用 CodeDom 生成 我正试图在其中获取本地方法。但是,到目前为止,我找不到办法做到这一点。我需要一些帮助。

我已经尝试将 CodeMemberMethod 添加到 CodeMemberMethod,但似乎没有办法做到这一点。我似乎找不到任何替代品。

目前我的 CodeDom 代码使用 MethodInfo 作为基础:

var method = new CodeMemberMethod();
method.Name = methodInfo.Name;
method.ReturnType = new CodeTypeReference(methodInfo.ReturnType);

//left out parameter stuff

var gMethod = new CodeMemberMethod() { Name = "g", ReturnType = new CodeTypeReference(methodInfo.ReturnType) };
gMethod.Statements.Add(new CodeMethodReturnStatement(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression("instance"), methodInfo.Name), parameterReferences.ToArray())));
method.Statements.Add(gMethod);

现在,痛苦在最​​后一句话中。我实际上是在尝试将 CodeMemberMethod 添加到 CodeMemberMethod,这是不允许通过语句 属性。有没有其他方法可以做到这一点?

Local functions 直到 C# 版本 7 才成为受支持的语言结构。CodeDOM 的设计要早得多,并不涵盖所有 C# 功能,即使是当时的 C# 版本也是如此。换句话说,不幸的是,没有办法声明“本地方法”并将其添加到另一个方法的 Statements 集合中。

相反,请考虑声明一个单独的 private 方法。您的 class 的 public 界面将不受影响,而且您很可能会实现您想要的效果。但是,无法隐式访问“外部方法”的参数。

此外,考虑查看 以获取更多想法。