Microsoft JScript 引擎将 JavaScript 数组实现为IDispatchEx
对象。在 C# 中,可以通过反射或作为操作来操作它们dynamic
对象(与dynamic
,只能访问属性和方法,例如length
, push()
等,但不通过索引引用实际元素)。例子:
JavaScript:
var T = new ActiveXObject("MySimulator.World");
var ar = ["a", "b", "c"];
T.MyFunction(ar);
C#:
public void MyFunction(object array)
{
dynamic dynArray = array;
int length = dynArray.length;
dynArray.push("d");
SetAt(array, 1, "bb");
Console.WriteLine("MyFunction called, array.length: " + length);
Console.WriteLine("array[0]: " + GetAt(array, 0));
Console.WriteLine("array[1]: " + GetAt(array, 1));
Console.WriteLine("array[3]: " + GetAt(array, 3));
}
static object GetAt(object array, int index)
{
return array.GetType().InvokeMember(index.ToString(),
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty,
null, array, new object[] { });
}
static object SetAt(object array, int index, object value)
{
return array.GetType().InvokeMember(index.ToString(),
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty,
null, array, new object[] { value });
}
Output:
MyFunction called, array.length: 3
array[0]: a
array[1]: bb
array[3]: d