是否可以使用Linq简化以下代码?
Transform parent;
List<GameObject> children = new List<GameObject>();
foreach (Transform child in parent)
{
children.Add(child.gameObject);
}
我希望简单地写一下parent.ForEach()但转换并不是很方便。有没有人知道这个的简化?
这只是好奇而没有必要。
编辑:父母不是孩子的列表,而是变换。
答案 0 :(得分:4)
你的情况不会像你期望的那样使用Linq。您可以做的一件事是使用扩展方法,如下所示。
public static class Extension{
public static IEnumerable<Transform> GetChildren(this Transform tr)
{
List<Transform> children = new List<Transform>();
foreach (Transform child in tr)
{
children.Add(child);
}
// You can make the return type an array or a list or else.
return children as IEnumerable<Transform>;
}
}
并将其用作:
IEnumerable<Transform> trs = parent.GetChildren();
编辑: 魔法发生在参数中的this关键字上。该方法由实例调用,但实际上是静态的。调用实例将添加到参数列表中。在不太深入的情况下,它会在实例上提供静态方法。如果不放在特定的命名空间中,则不需要在自己的代码上添加任何内容。
答案 1 :(得分:4)
如果Transform
实现了IEnumerable
,而不是IEnumerable<Transform>
,那么您首先需要将其转换为通用版本才能使用Linq:
List<GameObject> children = parent
.Cast<Transform>()
.Select(t => t.gameObject)
.ToList();