Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查数组中所有元素的条件是否为真_C#_Arrays_For Loop_Foreach - Fatal编程技术网

C# 检查数组中所有元素的条件是否为真

C# 检查数组中所有元素的条件是否为真,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

我在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 &&
    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,如何检查所有项目?多谢各位

要赢得游戏所有
图片
s
rotation.z
值必须为
0

让我们在Linq
All
的帮助下实现它:

 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

要赢得游戏所有
图片
s
rotation.z
值必须为
0

让我们在Linq
All
的帮助下实现它:

 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)){…}