遍历作为参数传递给宿主函数的 JS 对象到字典中
Iterate through JS object passed as parameter to host function into a dictionary
如何将传递到主机 C# 方法的 JS 对象转换为名称和值对的字典?我的问题是如何解释在 exec 函数中接收到的“对象”。如果他们是 int,我可以使用...
foreach (int i in args)...
...但是他们是...什么?
例如,在一个 JS 文件中我有
myApi.exec("doThang", { dog: "Rover", cat: "Purdy", mouse: "Mini", <non-specific list of more...> } );
在 C# 中我有
public void foo()
{
var engine = new V8ScriptEngine();
engine.AddHostObject("myApi", a); // see below
// load the above JS
string script = loadScript();
// execute that script
engine.Execute(script);
}
public class a
{
public void exec(string name, params object[] args){
// - how to iterate the args and create say a dictionary of key value pairs?
}
}
编辑:更改了问题的具体内容,因为我知道 'params' 关键字不是 ClearScript 的特定部分。
您可以使用 ScriptObject
。脚本对象可以有索引属性和命名属性,所以你可以创建两个字典:
public void exec(string name, ScriptObject args) {
var namedProps = new Dictionary<string, object>();
foreach (var name in args.PropertyNames) {
namedProps.Add(name, args[name]);
}
var indexedProps = new Dictionary<int, object>();
foreach (var index in args.PropertyIndices) {
indexedProps.Add(index, args[index]);
}
Console.WriteLine(namedProps.Count);
Console.WriteLine(indexedProps.Count);
}
如果您不期望或不关心索引属性,可以跳过 indexedProps
。或者您可以构建一个 Dictionary<object, object>
实例来容纳两者。
如何将传递到主机 C# 方法的 JS 对象转换为名称和值对的字典?我的问题是如何解释在 exec 函数中接收到的“对象”。如果他们是 int,我可以使用...
foreach (int i in args)...
...但是他们是...什么?
例如,在一个 JS 文件中我有
myApi.exec("doThang", { dog: "Rover", cat: "Purdy", mouse: "Mini", <non-specific list of more...> } );
在 C# 中我有
public void foo()
{
var engine = new V8ScriptEngine();
engine.AddHostObject("myApi", a); // see below
// load the above JS
string script = loadScript();
// execute that script
engine.Execute(script);
}
public class a
{
public void exec(string name, params object[] args){
// - how to iterate the args and create say a dictionary of key value pairs?
}
}
编辑:更改了问题的具体内容,因为我知道 'params' 关键字不是 ClearScript 的特定部分。
您可以使用 ScriptObject
。脚本对象可以有索引属性和命名属性,所以你可以创建两个字典:
public void exec(string name, ScriptObject args) {
var namedProps = new Dictionary<string, object>();
foreach (var name in args.PropertyNames) {
namedProps.Add(name, args[name]);
}
var indexedProps = new Dictionary<int, object>();
foreach (var index in args.PropertyIndices) {
indexedProps.Add(index, args[index]);
}
Console.WriteLine(namedProps.Count);
Console.WriteLine(indexedProps.Count);
}
如果您不期望或不关心索引属性,可以跳过 indexedProps
。或者您可以构建一个 Dictionary<object, object>
实例来容纳两者。