比较 C#/Unity 中的列表并忽略项目
Compare lists in C# / Unity and ignore items
我在 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])
..但不确定如何进一步编写。如有任何帮助,我们将不胜感激!
使用 linq:
foreach (var component in rendererComponents.Where(r => r.gameObject.tag != "ignoreRend"))
除了 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
我在 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])
..但不确定如何进一步编写。如有任何帮助,我们将不胜感激!
使用 linq:
foreach (var component in rendererComponents.Where(r => r.gameObject.tag != "ignoreRend"))
除了 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