0

尝试从通过 ClearScript 托管的脚本中调用 Enum.Parse 时出现异常

错误

Error: The non-generic method 'System.Enum.Parse(System.Type, string)' cannot be used with type arguments
--- Script error details follow ---
   Error: The non-generic method 'System.Enum.Parse(System.Type, string)' cannot be used with type arguments
       at translateParameterValue (Script [temp]:11:27) ->          return clr.System.Enum.Parse(app.MyLibrary.MyEnum, value);

脚本

return clr.System.Enum.Parse(app.MyLibrary.MyEnum, value);

我很确定我clr正确注册了对象(这包含mscorlib,SystemSystem.Core

似乎 ClearScript 正在尝试调用,并且对是否将第一个参数app.MyLibrary.MyEnum设为通用参数或将其作为System.Type参数传递感到困惑。

问题

在这种情况下,我该怎么做才能正确调用System.Enum.Parse函数?

4

1 回答 1

2

答案比我想象的要简单。由于 ClearScript 将第一个参数视为泛型参数,因此您只需要一个System.Type从类型参数返回实例的函数,它可以很简单:

class Utility
{
    public Type GetType<T>() {
        return typeof(T);
    }
}

然后将其注册到您的ScriptEngine

_engine.AddHostObject("Utility", new Utility());

然后在你的脚本中使用它:

return clr.System.Enum.Parse(Utility.GetType(nepes.DecaTech.CoreData.ProcessStates), value);

ClearScript 还附带了一个实用程序类ExtendedHostFunctions,它提供了几个有用的实用程序功能,包括与上述类似的一个typeOf(T)

于 2020-04-11T08:46:12.273 回答