【发布时间】:2015-12-08 18:53:17
【问题描述】:
所以我的想法是我想使用我自己的称为FindChildWithTag() 的方法获得一个带有特定标签的GameObject,它是GameObject 的子代。下面有两种不同的方法,我相信它们的目的相似。
第一
void GameObject FindChildWithTag(string tag)
{
GameObject temp = GetComponentsInChildren<Transform>().
Select(x => x.gameObject).
FirstOrDefault(x => x.tag == tag && x != transform);
return temp;
}
第二次
void GameObject FindChildWithTag(string tag)
{
foreach (Transform item in transform)
{
if (item.tag == tag)
{
return item.gameObject;
}
}
return null;
}
但奇怪的是,第一个返回 null 时,第二个返回正确。
知道我的错在第一个吗?因为我的想法告诉我这两种方法有着相同的目标。
谢谢。
【问题讨论】:
-
我认为您的条件
x != transform是错误的,因为您将x 归因于x.gameObject -
@RicardoReiter 我不认为。
-
但是你会比较一个游戏对象引用和一个变换引用......或者不是?
-
@RicardoReiter afaik,相同级别的 lambda 表达式不会相互影响。所以,如果我把
FirstOrDefault()放在Select()表达式中,你的意见就会完成。 -
也许你的 lambda 表达式是错误的。如果您使用第二种算法但使用
foreach (Transform item in GetComponentsInChildren<Transform>())而不是foreach (Transform item in transform),会起作用吗?