从脚本 (ClearScript) 中获取 System.Type 个实例
Get System.Type instance from within script (ClearScript)
我在尝试从通过 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
、System
和 System.Core
)
似乎 ClearScript 正在尝试调用并且正在混淆是将第一个参数 app.MyLibrary.MyEnum
设为通用参数还是将其作为 System.Type
参数传递。
问题
在这种情况下,我该怎么做才能正确调用 System.Enum.Parse
函数?
答案比我想象的要简单。由于 ClearScript 将第一个参数视为通用参数,因此您只需要一个 returns 来自类型参数的 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 还附带了一个实用程序 class ExtendedHostFunctions
,它提供了几个有用的实用程序函数,包括一个类似于上面的 typeOf(T)
.
我在尝试从通过 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
、System
和 System.Core
)
似乎 ClearScript 正在尝试调用并且正在混淆是将第一个参数 app.MyLibrary.MyEnum
设为通用参数还是将其作为 System.Type
参数传递。
问题
在这种情况下,我该怎么做才能正确调用 System.Enum.Parse
函数?
答案比我想象的要简单。由于 ClearScript 将第一个参数视为通用参数,因此您只需要一个 returns 来自类型参数的 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 还附带了一个实用程序 class ExtendedHostFunctions
,它提供了几个有用的实用程序函数,包括一个类似于上面的 typeOf(T)
.