如何使用 ClearScript 将 JavaScript 数组传递给主机?
How can you pass a JavaScript array to the host with ClearScript?
我正在尝试将 JavaScript 数组传递给宿主函数,但找不到有关如何使用 ClearScript 执行此操作的文档。我本来以为它会这么简单,但事实并非如此。
public class myHostType
{
public static void print(string format, object[] args)
{
//TODO: implement print
}
}
...
engine.addHostType("console", typeof(myHostType));
engine.Execute("console.print('Hello', ['World', 42])");
使用此代码我得到 Error: The best overloaded method match for V8SScript1.myHostType.print(string, object[])' has some invalid arguments.'
这是我能找到的最接近解决方案的东西。没有更好的方法吗?
public class myHostType
{
public static void print(string format, dynamic args)
{
var realArgs = new Object[args.length];
for (int i = 0; i < realArgs.Length; ++i)
{
realArgs[i] = args[i];
}
//TODO: implement print
}
}
ClearScript 不会自动转换数组,所以您必须像以前那样自己做。
您也可以在脚本端进行转换:
engine.AddHostObject("host", new HostFunctions());
engine.Execute(@"
Array.prototype.toClrArray = function () {
var clrArray = host.newArr(this.length);
for (var i = 0; i < this.length; ++i) {
clrArray[i] = this[i];
}
return clrArray;
};
");
...
engine.Execute("console.print('Hello {0} {1}', ['World', 42].toClrArray());");
在这种情况下,使用 params
:
可能更有意义
public class myHostType {
public static void print(string format, params object[] args) {
Console.WriteLine(format, args);
}
}
...
engine.Execute("console.print('Hello {0} {1}', 'World', 42);");
我正在尝试将 JavaScript 数组传递给宿主函数,但找不到有关如何使用 ClearScript 执行此操作的文档。我本来以为它会这么简单,但事实并非如此。
public class myHostType
{
public static void print(string format, object[] args)
{
//TODO: implement print
}
}
...
engine.addHostType("console", typeof(myHostType));
engine.Execute("console.print('Hello', ['World', 42])");
使用此代码我得到 Error: The best overloaded method match for V8SScript1.myHostType.print(string, object[])' has some invalid arguments.'
这是我能找到的最接近解决方案的东西。没有更好的方法吗?
public class myHostType
{
public static void print(string format, dynamic args)
{
var realArgs = new Object[args.length];
for (int i = 0; i < realArgs.Length; ++i)
{
realArgs[i] = args[i];
}
//TODO: implement print
}
}
ClearScript 不会自动转换数组,所以您必须像以前那样自己做。
您也可以在脚本端进行转换:
engine.AddHostObject("host", new HostFunctions());
engine.Execute(@"
Array.prototype.toClrArray = function () {
var clrArray = host.newArr(this.length);
for (var i = 0; i < this.length; ++i) {
clrArray[i] = this[i];
}
return clrArray;
};
");
...
engine.Execute("console.print('Hello {0} {1}', ['World', 42].toClrArray());");
在这种情况下,使用 params
:
public class myHostType {
public static void print(string format, params object[] args) {
Console.WriteLine(format, args);
}
}
...
engine.Execute("console.print('Hello {0} {1}', 'World', 42);");