You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C#中x / Convert.ToInt32(0) == 0运行时未抛出除零异常?

问题现象

梳理跟踪输出相关习题时,发现以下代码行运行时没有抛出预期的异常:

if(x != 10 && x / Convert.ToInt32(0) == 0) 

原本的分析逻辑如下:

  • 步骤1:Convert.ToInt32(0)执行结果为0,0做除数理应触发System.DivideByZeroException
  • 步骤2:但实际运行时整个x != 10 && x / Convert.ToInt32(0) == 0条件结果为false
完整可运行代码
class Program
{
    static void Main(string[] args)
    {
        int x, y = 1;
        x = 10;
        if(x != 10 && x / Convert.ToInt32(0) == 0)
        Console.WriteLine(y);
        else
        Console.WriteLine(++y);
        Console.ReadLine();
    }
}

运行输出结果为2,运行效果截图:
运行输出截图

原因说明

这是C#中&&运算符的短路求值特性导致的:逻辑与运算符&&仅在左侧表达式结果为true时,才会继续计算右侧表达式的结果。如果左侧表达式已经为false,整个逻辑与表达式的结果已经可以确定为false,右侧表达式会被直接跳过不会执行。

本案例中x被赋值为10,因此x != 10的计算结果为false,右侧的除以零运算代码根本不会被执行,自然不会触发DivideByZeroException异常。程序会直接进入else分支执行++y,所以最终输出结果为2。

如果将代码中的&&替换为非短路逻辑与运算符&,则左右两侧的表达式都会被强制计算,就会触发预期的除以零异常。


内容的提问来源于stack exchange,提问作者Preeti Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:57:03