您可以将这2条IfElse语句转换为1条

时间:2019-04-27 12:58:12

标签: c# if-statement

我尝试缩短我的if语句。我完成了1个,但看不到如何缩短另一个1并清理它。我以1为例进行了简化,希望可以得到一些帮助:D。

我解决了这个问题1。

if (_clickDestination.Y < Position.Y && 
_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
    Position.Y -= (int)StairSpeed;  // moves the person up on the stairs.
}
else if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
    Position.Y += (int)StairSpeed; // moves the person down on the stairs
}

对此:

if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX)
{
    if (_clickDestination.Y < Position.Y)
    {
        Position.Y -= (int)StairSpeed;  // moves the person up on the stairs.
    }
    else
    {
        Position.Y += (int)StairSpeed;  // moves the person down on the stairs
    }
}

现在我正像上面一样尝试修复此1。

else if (
    (_clickDestination.Y == Position.Y && 
    _clickDestination.X > Position.X) || 
    (_clickDestination.Y != Position.Y &&
    _clickWalkStairsX != Position.X)
) 
{
    Position.X += (int)Speed; // moves the person to the right
}
else if (_clickDestination.Y != Position.Y || 
    _clickDestination.X < Position.X)
{
    Position.X -= (int)Speed; // moves the person to the left
}

我希望有人能真正看到需要解决的问题,并会非常感激。否则所有其他人都会互相支持。

1 个答案:

答案 0 :(得分:0)

如果要完全更改,我将其更改为此。 第一个条件处理Y比较,第二个条件处理X比较:

int speedChange = 0;

//...

else if (_clickDestination.Y == Position.Y)
   speedChange = _clickDestionation.X.CompareTo(Position.X) * (int)Speed;
else
{
   if (_clickWalkStairsX != Position.X)
      speedChange = (int)Speed;
   else if (_clickDestination.X < Position.X)
      speedChange = -(int)Speed;
}

此外,对于以前的条件,您可以将其缩短为:

if (_clickDestination.Y != Position.Y && Position.X >= _clickWalkStairsX{
    Position.Y += _clickDestination.Y.CompareTo(Position.Y) * (int)StairSpeed;