瓦拉。如何删除 GTK 容器的所有 children?

Vala. How do you delete all the children of a GTK container?

已解决。示例见回复。

我有一个装有 children 的容器。我需要删除所有 children。这在 C 中很容易。Vala 不起作用。

以下代码产生错误集合缺少类型参数

var a_box = new Box (Orientation.VERTICAL, 0);
// Add some children
List children = a_box.get_children();
foreach (Widget element in children) { }

我测试了此代码的二十多个变体以及许多数据类型。当我没有收到丢失的类型投诉时,我最终得到一个不能用作小部件的数据类型,这意味着我无法销毁它。

使用 Vala,而不是 C 或 Python 或任何一种容易做到这一点的语言,如何删除容器的所有 children?

据我所知,获得 children 的唯一方法是作为列表,但在 Vala 中,列表条目不能用于删除或销毁小部件。

在 C 中删除和销毁工作。我有几个基于 C 的应用程序同时执行这两项工作。 Vala 0.30 编译器拒绝从 C 到 Vala 的所有翻译,并拒绝编译来自 Valadocs 等的示例

要更正有关缺少类型参数的错误,只需提供类型参数。 Gtk.Container.get_children() 的签名表示类型是 List<weak Widget>,所以让我们使用它:

GLib.List<weak Gtk.Widget> children = container.get_children ();
foreach (Gtk.Widget element in children)
  container.remove (element);

当然,你也可以只使用类型推断:

var children = container.get_children ();
foreach (Gtk.Widget element in children)
  container.remove (element);

或者干脆完全避免使用临时变量:

foreach (Gtk.Widget element in container.get_children ())
  container.remove (element);

但我能想到的最简单的方法是:

container.foreach ((element) => container.remove (element));