调用字符串方法时出现 ScriptengineException
ScriptengineException when string methods are called
当我使用以下代码片段时,出现 ScrptEngineException,该对象不支持 属性 或方法。
var engine = new JScriptEngine();
engine.AddHostType("String", typeof(System.String));
engine.ExecuteCommand("test = 'variabel'; test.StartsWith('nice');");
我尝试了其他一些字符串函数,例如 IndexOf、ToArray(扩展)和其他一些函数,但它们似乎不起作用。
有人可以帮我吗?
在您的示例中,test
是一个 JavaScript 字符串,它没有 StartsWith
方法。即使它是从 .NET 返回的,为了方便起见,它也会被转换为 JavaScript 字符串。
您可以添加将 JavaScript 字符串转换为 .NET 字符串的方法:
engine.AddHostObject("host", new HostFunctions());
engine.Execute(@"
String.prototype.toHost = function() {
return host.newVar(this.valueOf());
}
");
然后这应该可以工作:
engine.AddHostType(typeof(Console));
engine.Execute(@"
test = 'variable';
Console.WriteLine(test.toHost().StartsWith('var'));
Console.WriteLine(test.toHost().StartsWith('vaz'));
");
顺便说一句,注意这个:
engine.AddHostType("String", typeof(System.String));
这隐藏了内置的 JavaScript String
函数并且可能会破坏某些东西。
当我使用以下代码片段时,出现 ScrptEngineException,该对象不支持 属性 或方法。
var engine = new JScriptEngine();
engine.AddHostType("String", typeof(System.String));
engine.ExecuteCommand("test = 'variabel'; test.StartsWith('nice');");
我尝试了其他一些字符串函数,例如 IndexOf、ToArray(扩展)和其他一些函数,但它们似乎不起作用。
有人可以帮我吗?
在您的示例中,test
是一个 JavaScript 字符串,它没有 StartsWith
方法。即使它是从 .NET 返回的,为了方便起见,它也会被转换为 JavaScript 字符串。
您可以添加将 JavaScript 字符串转换为 .NET 字符串的方法:
engine.AddHostObject("host", new HostFunctions());
engine.Execute(@"
String.prototype.toHost = function() {
return host.newVar(this.valueOf());
}
");
然后这应该可以工作:
engine.AddHostType(typeof(Console));
engine.Execute(@"
test = 'variable';
Console.WriteLine(test.toHost().StartsWith('var'));
Console.WriteLine(test.toHost().StartsWith('vaz'));
");
顺便说一句,注意这个:
engine.AddHostType("String", typeof(System.String));
这隐藏了内置的 JavaScript String
函数并且可能会破坏某些东西。