static void Main(string[] args)
        {
            int c = 0;
            int b;            if (c == 0)
            { 
                b = 1;
                Console.WriteLine(b);
            
            }
            if (b == 1)
            {
                b = 2;
                Console.WriteLine(b);            }
            
        }为什么说局部变量b没有赋值,但是static void Main(string[] args)
        {
            int c = 0;
            int b;            if (c == 0)
            { 
                b = 1;
                Console.WriteLine(b);
            
            }
            //if (b == 1)
            //{
            //    b = 2;
            //    Console.WriteLine(b);            //}
            
        }
显示的是b等于1呀,说明在第二个if之前已经赋值了,为什么还提示说b没赋值?

解决方案 »

  1.   

    编译器检查就这么检查的,你可以选项中不检查初始化,或者按照规则初始化,编译器无法检查逻辑上的c是不是0,来判断后面代码是否是初始化过的。这个简单的也许可以,但编译器无法在编译时候预处理所有的if语句,有些运行的不同时候,效果不同。所以if中对变量初始化赋值是被忽略的。
      

  2.   

    如果改为
       if (c == 0)
                { 
                    b = 1;
                    Console.WriteLine(b);
                
                }
    else{
    b=0;
    }这样就能路径全覆盖了
      

  3.   

    如果你的c!=0 则下面红色部分就不会执行,你的b也就没赋值。static void Main(string[] args)
            {
                int c = 0;
                int b;            if (c == 0)
                { 
                    b = 1;
                    Console.WriteLine(b);
                
                }

                if (b == 1)
                {
                    b = 2;
                    Console.WriteLine(b);            }
                
            }