假设我有GLib.Array<Item?>
并希望将其转换为Item[]
,我将如何在Vala中执行此操作?
答案 0 :(得分:4)
首先,除非您需要与现有代码进行互操作,否则请勿使用GLib.Array
。使用GLib.GenericArray
,这样更容易正确使用,更难以正确使用。
GLib.Array.data
是一个常规数组(在您的情况下为Item?[]
),GLib.GenericArray.data
也是如此,因此您可以使用它。如果你将它分配给一个拥有的变量,Vala会复制一份。
答案 1 :(得分:1)
一种天真的方法是,使用index()
方法从数组中取出所有项目,然后使用Item[]
将它们附加到空的+=
数组中。
一个简单的示例程序:
public int main (string[] args) {
Array<string> array = new Array<string> ();
array.append_val ("1. entry");
array.append_val ("2. entry");
string[] builtin = {};
for (var i = 0; i < array.length; i++) {
builtin += array.index (i);
}
return 0;
}
更新: GLib.GenericArray
似乎是一个更好的解决方案。至于data
属性:在GenericArray
,Valadoc记录了Array
,{{1}}它不是(这并不意味着它不起作用) ,但我还没有尝试过。)