简化转换中的foreach

Alo*_*lox 4 c# linq foreach transform unity-game-engine

使用Linq是否可以简化以下代码?

Transform parent;
List<GameObject> children = new List<GameObject>();
foreach (Transform child in parent)
{
    children.Add(child.gameObject);
}
Run Code Online (Sandbox Code Playgroud)

我希望简单地编写parent.ForEach(),但是转换没有这种便利。有人知道这个简化吗?

这只是出于好奇,没有必要。

编辑:父母不是孩子的列表而是一个转换。

尝试巴拉兹的回答

Han*_*ing 5

如果是TransformImplements IEnumerable,但不是,IEnumerable<Transform>那么您首先需要将其转换为通用版本,然后才能使用Linq:

List<GameObject> children = parent
                               .Cast<Transform>()
                               .Select(t => t.gameObject)
                               .ToList();
Run Code Online (Sandbox Code Playgroud)

  • 您不是将“父”本身转换为“转换”。`Cast &lt;TTarget&gt;`将可枚举的* elements *转换为指定的类型。因为正如@Hans所说,Transform实现了IEnumerable,但没有实现IEnumerable &lt;Transform&gt;,因此在访问其功能时就好像您正在使用IEnumerable &lt;object&gt;一样。它不是IEnumerable &lt;object &gt;&gt;,但是效果是一样的-您丢失类型信息。因此,最重要的是您需要调用`Cast &lt;T&gt;`来满足编译器的要求,即告诉您确定集合中的元素实际上是`Transform`s。 (3认同)