这可以缩短吗?

时间:2015-01-07 00:24:30

标签: c#

这段代码查看了6个数组元素并检查它们是否等于或小于零,首先是我不喜欢它是不是很长,其次是它由于6个数组元素,我给了6个赢家屏幕。

for (int i = 0; i <= parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray().Length; i++)
{
    if (parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[0].getMonHealth() <= 0 
      && parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[1].getMonHealth() <= 0 
      && parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[2].getMonHealth() <= 0 
      && parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[3].getMonHealth() <= 0 
      && parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[4].getMonHealth() <= 0 
      && parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()[5].getMonHealth() <= 0)
    {
        Winner winners = new Winner();
        winners.Show();
        this.Hide();
    }
}

3 个答案:

答案 0 :(得分:1)

如果你添加:

using System.Linq;

然后,您可以使用Linq中的.Any()方法执行以下操作

bool anyLessThanZero = 
    parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()
    .Any(monster => monster.getMonHealth() <= 0);

答案 1 :(得分:0)

parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()分配给变量,并将parent.mygame.getplayer(parent.mygame.getpturn()).getmonsterarray()替换为代码中的变量,这样您就不必一遍又一遍地输入它。

答案 2 :(得分:0)

您的代码几乎看起来不像C#...

将其与此相比:

// assume CurrentPlayer is a property that returns Players[Turn]
var currentPlayer = parent.Game.CurrentPlayer;

if (currentPlayer.Monsters.All(monster => monster.Health <= 0))
{
    var winner = new Winner();
    winner.Show();
    this.Hide();
}

您应该使用属性而不是getter方法。此外,C#约定是locals是camelCased,类型/属性/方法是PascalCased。