aardio 文档
aardio 范例: 数组
//数组
import console;
import dotNet;
var compiler = dotNet.createCompiler("C#");
compiler.Source = /***
namespace CSharpLibrary
{
public class Object
{
public int num = 123;
/*
1、基本纯值类型兼容的 .NET 数组、多维数组在 aardio 中
存为 com.SafeArray 数组。COM 数组与普通 aardio 数组操作完全相同。
*/
public static object TestSafeArray(double [] arr)
{
return arr;
}
/*
2、交错数组封包为 DispatchableObject 对象,然后封包为 dotNet.object。
其他 .NET 类型对象数组封包为 dotNet.object,支持以下特性:
1)可用 Length 属性获取数组长度。
2)可用 1 起始的下标访问数组成员。
3)支持 dotNet.each 遍历数组成员。
4)可用 table.parseValue 展开。
*/
public static object TestObjectArray(CSharpLibrary.Object [] arr)
{
return arr;
}
/*
3、.NET 的 一维 System.Object 数组在 aardio 中封包为 dotNet.object。
如果数组中实际保存的是可以直接互换的通用纯值( 例如字符串、数值、布尔值 …… ),
在 aardio 中可用 dotNet.getObject(netObjArray).Value 解包为原生数组。
*/
public static object[] GetSafeObjectArray()
{
return new object[]
{
new object[] { 123, "str", true },
new object[] { 456, "字符串", true }
};
}
}
}
***/
compiler.import("CSharpLibrary");
//1、基本纯值类型兼容的 .NET 数组、多维数组可以直接交换
//------------------------------------------------------------------------
var safeArray = CSharpLibrary.Object.TestSafeArray({1,2,3});
console.dump(safeArray); //会转换为 aardio 数组兼容的 com.SafeArray
//2、创建 .NET 类型化数组,参数类型正确匹配,不会报错。
//------------------------------------------------------------------------
var objArray = dotNet.createArray( CSharpLibrary.Object, 2 )
objArray[1] = CSharpLibrary.Object(); //默认数组是空的
objArray[2] = CSharpLibrary.Object();
//下面这样写也可以
var objArray = dotNet.createArray( { CSharpLibrary.Object(),CSharpLibrary.Object() } )
//下面这样写也可以,aardio 会自动转换为类型化数组。
var objArray = { CSharpLibrary.Object(),CSharpLibrary.Object() }
//.NET数组取长度要用 Length 属性而不是#。
console.log("数组长度",objArray.Length)
//访问数组的第 1 个元素( aardio 中起始下标为 1 )
console.log(objArray[1].num)
//遍历 .NET 数组
for i,v in dotNet.each(objArray) {
console.log(i,v)
}
//3、解包仅包含简单纯值的 .NET 返回的一维 System.Object 数组。
//------------------------------------------------------------------------
var netArray = CSharpLibrary.Object.GetSafeObjectArray();
console.log(netArray)
/*
但实际上,netArray 存放的是基础数据类型,可以安全地转换为 aardio 数组。
我们用 dotNet.getObject() 解开 dotNet.object 封包 ,再用 Value 属性解开 DispatchableObject 封包。
就可以拿到原始的纯数组,这是一个 com.SafeArray 数组(实际就是声明了 COM 元类型的普通数组)。
*/
var safeArray = dotNet.getObject(netArray).Value;
console.dump(safeArray);
console.pause();
Markdown 格式