C# 检查数组中所有元素的条件是否为真
我在Unity3D中有一个C#数组类型的变换对象。要赢得游戏所有图片的旋转。z值必须为0C# 检查数组中所有元素的条件是否为真,c#,arrays,for-loop,foreach,C#,Arrays,For Loop,Foreach,我在Unity3D中有一个C#数组类型的变换对象。要赢得游戏所有图片的旋转。z值必须为0 Transform[] Pictures; if (Pictures[0].rotation.z == 0 && Pictures[1].rotation.z == 0 && Pictures[2].rotation.z == 0 && Pictures[3].rotation.z == 0 && Pictur
Transform[] Pictures;
if (Pictures[0].rotation.z == 0 &&
Pictures[1].rotation.z == 0 &&
Pictures[2].rotation.z == 0 &&
Pictures[3].rotation.z == 0 &&
Pictures[4].rotation.z == 0 &&
Pictures[5].rotation.z == 0)
{
YouWin = true;
//WinText.enabled = true;//.SetActive(true);
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
但这是一种丑陋的方式。如果阵列扩大,游戏不会结束。所以我试着写新的代码来让事情变得更简单。但是不能
foreach (var item in Pictures)
{
if (item.rotation.z == 0)
{
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
}
foreach工作不好。从foreach在第一个映像中存在。必须检查每个图像的旋转.z值
for (int i = 0; i < Pictures.Length; i++)
{
if (Pictures[i].rotation.z ==0)
{
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
}
for(int i=0;i
“for”与foreach的结果相同。我认为它需要嵌套for或foreach。如果旋转.z值等于0,如何检查所有项目?多谢各位
要赢得游戏所有图片
srotation.z
值必须为0
让我们在LinqAll
的帮助下实现它:
using System.Linq;
...
if (Pictures.All(picture => picture.rotation.z == 0)) {
// Win
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
如果您想循环,您可以反转逻辑-YouWin==true
,如果我们没有反例(item.rotation.z!=0
)
要赢得游戏所有图片
srotation.z
值必须为0
让我们在LinqAll
的帮助下实现它:
using System.Linq;
...
if (Pictures.All(picture => picture.rotation.z == 0)) {
// Win
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
如果您想循环,您可以反转逻辑-YouWin==true
,如果我们没有反例(item.rotation.z!=0
)
您有几个选项来执行此任务。 最简单的方法是添加一个额外的标志并否定检查条件。 如果任何图片的旋转.z不是0,则表示您尚未获胜。 如果所有图片旋转.z为0,则您已获胜
bool success = true;
foreach (var item in Pictures)
{
if (item.rotation.z != 0)
{
success = false;
}
}
if (success) {
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
或使用Linq:
bool won = pictures.TrueForAll(x=> x.rotation.z == 0);
您有几个选项来执行此任务。 最简单的方法是添加一个额外的标志并否定检查条件。 如果任何图片的旋转.z不是0,则表示您尚未获胜。 如果所有图片旋转.z为0,则您已获胜
bool success = true;
foreach (var item in Pictures)
{
if (item.rotation.z != 0)
{
success = false;
}
}
if (success) {
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
或使用Linq:
bool won = pictures.TrueForAll(x=> x.rotation.z == 0);
if(Pictures.All(pic=>pic.rotation.z==0)){…}
if(Pictures.All(pic=>pic.rotation.z==0)){…}