c# - 如何使用 Mono.CSharp.Evaluator 编译委托(delegate)?

标签 c# mono evaluator

我正在尝试编译一大堆 C 代码并取回一个委托(delegate),我可以使用它稍后调用代码。到目前为止我已经尝试过了

eval.Compile("delegate () {}");

还有

eval.Evaluate("delegate () {}");

两种情况都给我同样的错误:

FatalException: Cannot convert `anonymous method' to non-delegate type `object'
Mono.CSharp.Report.Error (Int32 code, Location loc, System.String error)
Mono.CSharp.Report.Error (Int32 code, Location loc, System.String format, System.String arg1, System.String arg2)
Mono.CSharp.AnonymousMethodExpression.CompatibleChecks (Mono.CSharp.ResolveContext ec, Mono.CSharp.TypeSpec delegate_type)
Mono.CSharp.AnonymousMethodExpression.Compatible (Mono.CSharp.ResolveContext ec, Mono.CSharp.TypeSpec type)
Mono.CSharp.Convert.ImplicitConversionStandard (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, Mono.CSharp.TypeSpec target_type, Location loc, Boolean explicit_cast)
Mono.CSharp.Convert.ImplicitConversionStandard (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, Mono.CSharp.TypeSpec target_type, Location loc)
Mono.CSharp.Convert.ImplicitConversion (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, Mono.CSharp.TypeSpec target_type, Location loc)
Mono.CSharp.Convert.ImplicitConversionRequired (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression source, Mono.CSharp.TypeSpec target_type, Location loc)
Mono.CSharp.Assign.ResolveConversions (Mono.CSharp.ResolveContext ec)
Mono.CSharp.Assign.DoResolve (Mono.CSharp.ResolveContext ec)
Mono.CSharp.SimpleAssign.DoResolve (Mono.CSharp.ResolveContext ec)
Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.ResolveContext ec)
Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec, ResolveFlags flags)
Rethrow as InternalErrorException: (1,1): InteractiveHost
Mono.CSharp.Method.Emit ()
Mono.CSharp.TypeDefinition.Emit ()
Mono.CSharp.ClassOrStruct.Emit ()
Mono.CSharp.Class.Emit ()
Mono.CSharp.TypeDefinition.EmitContainer ()
Mono.CSharp.Evaluator.CompileBlock (Mono.CSharp.Class host, Mono.CSharp.Undo undo, Mono.CSharp.Report Report)
Mono.CSharp.Evaluator.Compile (System.String input, Mono.CSharp.CompiledMethod& compiled)
Mono.CSharp.Evaluator.Compile (System.String input)
DynamicMonoBehaviour.SetDynamicMethod (System.String methodname, System.String code, System.Type returnType) (at Assets/Kelvin4/DynamicMonoBehaviour.cs:53)
DynamicMonoBehaviour.Awake () (at Assets/Kelvin4/DynamicMonoBehaviour.cs:37)

最佳答案

匿名方法和 lambda 表达式是无类型表达式,不能单独存在。

您需要将其显式转换为委托(delegate)类型,以便它成为一个对象:

new Action(delegate { ... })

关于c# - 如何使用 Mono.CSharp.Evaluator 编译委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986975/

相关文章:

c# - Linq 查询数据集中的多个数据表

c# - 在 C# 中使用 "using"的正确方法

c# - 如何在我的应用程序外部的窗口上设置 'always on top' 标志/设置?

xamarin.ios - ECDSA 和 ECDH 是否可用于单声道?

c# - Mono,asp.net C#和MVC的操作方法和教程

haskell - Haskell 中的相互递归求值器

C#如何判断ArrayList是否包含具有特定属性的对象

fonts - 如何在 Pango 和 Mono 中设置文件字体

Java 字符串和数学表达式计算器

alfresco - 如何在 Alfresco 4.2.2 中为 Share 编写自定义评估器?