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

Taş*_*şah 1 c# arrays foreach for-loop

我在 Unity3D 中有一个 C# 数组类型的 Transform 对象。要赢得比赛,所有图片的 rotation.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);
}
Run Code Online (Sandbox Code Playgroud)

但这是丑陋的方式。如果数组扩展,游戏不会结束。因此,我尝试编写新代码以使事情变得更容易。但不能。

foreach (var item in Pictures)
{
    if (item.rotation.z == 0)
    {
        YouWin = true;
        int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(currentSceneIndex + 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

foreach 不能正常工作。在第一个图像中存在于 foreach。必须检查每个图像的 rotation.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

"for" 与 foreach 的结果也相同。我认为它需要嵌套 for 或 foreach。如果它们的 rotation.z 值等于 0,我如何检查所有项目?谢谢你。

Dmi*_*nko 5

要赢得比赛,所有 picturerotation.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);
 }
Run Code Online (Sandbox Code Playgroud)

如果你想循环,你可以反转逻辑 -YouWin == true如果我们没有反例item.rotation.z != 0

 // we win... 
 YouWin = true;

 foreach (var item in Pictures) 
   if (item.rotation.z != 0) {
      // ... unless we don't win
      YouWin = false;

      break;
   }

 if (YouWin) {
   // Win 
   int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
   SceneManager.LoadScene(currentSceneIndex + 1);
 } 
Run Code Online (Sandbox Code Playgroud)