我正在使用 CodeDom 創建代碼。但是,CodeDom 不支持 lambda 語句。所以我現在試圖通過創建一個本地方法來模仿 lambda 語句,并將該方法作為參數傳遞給另一個方法。像這樣:public string MainMethod(string myParameter){ string g() { return instance.MainMethod(myParameter); } return someOtherMethod(g);}使用 CodeDom 已經生成了方法“MainMethod”,我正在嘗試在其中獲取本地方法。但是,到目前為止,我找不到辦法做到這一點。我可以使用一些幫助。我已經嘗試將 CodeMemberMethod 添加到 CodeMemberMethod 但似乎沒有辦法做到這一點。我似乎找不到任何替代方案。目前我的 CodeDom 代碼使用 MethodInfo 作為基礎:var method = new CodeMemberMethod();method.Name = methodInfo.Name;method.ReturnType = new CodeTypeReference(methodInfo.ReturnType);//left out parameter stuffvar 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,但 Statements 屬性不允許這樣做。有沒有辦法以另一種方式做到這一點?
1 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
在 C# 版本 7 之前,本地函數不是受支持的語言結構。 CodeDOM 的設計要早得多,并且不涵蓋所有 C# 功能,即使是當時的 C# 版本也是如此。換句話說,不幸的是,沒有辦法聲明一個“本地方法”并將其添加到Statements
另一個方法的集合中。
相反,請考慮聲明一個單獨的private
方法。你的類的公共接口將不受影響,并且很可能你會實現你想要的。但是,不能隱式訪問“外部方法”的參數。
另外,請考慮查看此答案以獲取更多想法。
- 1 回答
- 0 關注
- 134 瀏覽
添加回答
舉報
0/150
提交
取消