C# 零误差除法

C# 零误差除法,c#,exception,C#,Exception,我想计算一条直线的斜率,很自然,当一个点未定义时,就是你们试图除以零。好吧,我用一个try-catch来处理这个问题,但是仍然得到一个零除错误,但是在一个相当。。。意外地点 代码如下: private void tmrEnemyMovement_Tick(object sender, EventArgs e) { for (int i = 0; i < enemies.Count; i++) { int eneX = enemies[i].GetEn

我想计算一条直线的斜率,很自然,当一个点未定义时,就是你们试图除以零。好吧,我用一个try-catch来处理这个问题,但是仍然得到一个零除错误,但是在一个相当。。。意外地点

代码如下:

private void tmrEnemyMovement_Tick(object sender, EventArgs e) {
        for (int i = 0; i < enemies.Count; i++) {
            int eneX = enemies[i].GetEnemyWorldPosX();
            int eneY = enemies[i].GetEnemyWorldPosY();
            int playerX = player.GetPlayerWorldPosX();
            int playerY = player.GetPlayerWorldPosY();

            double slope = -100000000;
            try {
                slope = (GetDistanceBetween(eneY, playerY)) / (GetDistanceBetween(eneX, playerX));
            } catch (DivideByZeroException) {//Division by Zero Exception is handled here.
                slope = GetDistanceBetween(eneY, playerY) / 1;
            }

            int multiplicative = 1;

            int rise = 1;//Convert.ToInt32(slope * multiplicative);
            int run = multiplicative;
            Text = Convert.ToSingle(slope) + "";

            if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 2
                enemies[i].MoveEnemyTo(run, rise, "+-");
            } else if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 3
                enemies[i].MoveEnemyTo(run, rise, "+-");
            } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 1
                enemies[i].MoveEnemyTo(run, rise, "-+");
            } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 4
                enemies[i].MoveEnemyTo(run, rise, "--");
            }
        }
        Bitmap bmp = map.GetMap() as Bitmap;

        using (Graphics drawEnemy = Graphics.FromImage(bmp)) {
            for (int i = 0; i < enemies.Count; i++) {
                drawEnemy.DrawImage(enemies[i].getSprite(), new PointF(enemies[i].GetEnemyWorldPosX(), enemies[i].GetEnemyWorldPosY()));
            }
        }
    }
正如您所看到的,这是一个简单的getter,那么,当在try-catch中处理它时,为什么我得到的除法是零错误#1,而在这一行中是#2? 我错过什么了吗

**编辑:** 以下是堆栈跟踪:

尝试重新编译程序并确保处于调试模式。也不要使用try/catch计算坡度-此状态非常长。使用

var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
    slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
    slope = GetDistanceBetween(eneY, playerY);

你抓到的这个例外并不重要。您可以按Continue继续。或者您可以关闭已处理的异常(在调试->异常->公共语言运行时中取消选中用户已处理)。或者,您可以在没有附加调试程序的情况下运行程序(使用Ctrl+F5)。

尝试重新编译您的程序,并确保您处于调试模式。也不要使用try/catch计算坡度-此状态非常长。使用

var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
    slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
    slope = GetDistanceBetween(eneY, playerY);

你抓到的这个例外并不重要。您可以按Continue继续。或者您可以关闭已处理的异常(在调试->异常->公共语言运行时中取消选中用户已处理)。或者,您可以在没有附加调试器的情况下运行程序(使用Ctrl+F5)。

是否禁用了优化?当前,我正在调试模式下运行此程序。能否显示完整的堆栈跟踪?是的,请稍候,让我获取该跟踪并用它更新日志。好的,我已更新日志。是否禁用了优化?当前,我正在调试模式下运行此程序。你能显示完整的堆栈跟踪吗?是的,等一秒钟,让我获取它并用它更新帖子。好的,我已经更新了帖子。嗯,出于一些奇怪的原因,我的try-catch不起作用,但是if-else语句起作用了。。。。有点奇怪,但无论如何谢谢你的帮助!好吧,出于某种奇怪的原因,我的try-catch不起作用,但是if-else语句起作用了。。。。有点奇怪,但无论如何谢谢你的帮助!