比较C#/ Unity中的列表并忽略项目

问题描述 投票:2回答:2

我在Unity中使用Vuforia,它有一个名为DefaultTrackableEventHandler的内置脚本。它有这样的代码;

protected virtual void OnTrackingFound()

{
    var rendererComponents = GetComponentsInChildren<Renderer>(true);

            foreach (var component in rendererComponents)
            component.enabled = true;
}

我有一些标签为“ignoreRend”的项目,当跟踪找到目标图像时,我不想渲染它。我有一个这样的列表:

GameObject[] ignoreTheseObjects = GameObject.FindGameObjectsWithTag("ignoreRend");

我一直试图找到一种方法让foreach循环忽略我的ignoreTheseObjects列表中的项目,但没有任何成功。这感觉就像是很容易编码的东西,但我被卡住了...有没有办法比较列表中的项目?我试过寻找答案,但没有发现任何适合这个问题的东西。我在想类似的东西;

            if (rendererComponents[i] == ignoreTheseObjects[i])

..但不知道如何进一步写。任何帮助,将不胜感激!

c# list unity3d compare vuforia
2个回答
2
投票

除了Leo Bartkus回答:

假设您要忽略的项目也是rendererComponents集合的一部分,您可以执行以下操作:

只需检查循环中的标记。

foreach (var component in rendererComponents)
{
        if (component.tag == "ignoreRend")
        {
           continue; //this will continue with next item in list
        }
        component.enabled = true;
}

正如Leo建议你也可以使用LINQ

要使用LINQ,您必须将其导入

using System.LINQ

然后你就可以使用它:

var filteredComponents = rendererComponents.Where(r => r.gameObject.tag != "ignoreRend")
foreach (var component in filteredComponents)
{
     component.enabled = true;
}

有关LINQ的更多信息,您可能想访问getting started with LINQ


3
投票

使用linq:

foreach (var component in rendererComponents.Where(r => r.gameObject.tag != "ignoreRend"))
© www.soinside.com 2019 - 2024. All rights reserved.