我正在考虑将我们的应用程序从使用JavaScript.NET(Noesis)转换为使用ClearScript。
我们的应用程序包含大量用户创建的用于财务计算的Javascript算法/表达式 - 我宁愿避免在可能的情况下更改。
目前,使用JavaScript.NET,许多用户定义的算法遵循创建包含主机类型的JavaScript数组并将其作为参数传递给另一主机类型的函数的模式。使用JavaScript.NET,转换"只是工作"。请参阅下面的代码,了解我尝试做的事情:
using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.V8;
namespace ClearscriptPlayground
{
class Program
{
static void Main(string[] args)
{
using (var engine = new V8ScriptEngine())
{
var myClass = new MyClass();;
engine.AddHostObject("instance", myClass);
engine.AddHostType("MyType", HostItemFlags.DirectAccess, typeof(MyType));
engine.Execute(
@"var params = [new MyType('bye', 10),
new MyType('hello', 10)];
instance.SomethingElse(params)");
Console.ReadLine();
}
}
}
public class MyClass
{
// public void SomethingElse(ITypedArray<MyType> foo)
// {
// // Doesn't work.
// }
// public void SomethingElse(MyType[] foo)
// {
// // Doesn't work.
// }
// public void SomethingElse(dynamic foo)
// {
// var mapped = foo as ITypedArray<MyType>; // Doesn't work
// var mapped = foo as MyType[]; // Doesn't work either
// }
public void SomethingElse(ScriptObject foo)
{
// Works, but how best to convert to MyType[] or similar?
}
}
public struct MyType
{
public string Foo;
public int Bar;
public MyType(string foo, int bar)
{
Foo = foo;
Bar = bar;
}
}
}
NB :我知道我可以使用params = host.newArr(MyType, 2);
创建一个主机阵列,但这样可行 - 但这意味着要修改所有用户维护的JavaScript,我真的相当避免。
答案 0 :(得分:1)
您可以直接通过subset
使用JavaScript数组:
[]