码迷,mamicode.com
首页 > Windows程序 > 详细

关于C#中编译器保证变量必须初始化规则猜想

时间:2014-10-11 02:29:54      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   sp   div   on   log   代码   

现在两种情况:

第一种情况:

using System;
namespace Wrox
{
    public class Program
    {
        static void Main(string[] args)
        {
            int index;             
            if(true)
            {                
                index = 100;            
            }            
            Console.WriteLine(index);            
            Console.ReadKey();
            
        }
    }
}

 

第二种情况:

using System;
namespace Wrox
{
    public class Program
    {
        static void Main(string[] args)
        {
            int index; 
            bool istrue=true; 
            if(istrue == true)
            {                
                index = 100;            
            }            
            Console.WriteLine(index);            
            Console.ReadKey();
            
        }
    }
}

 

在以上两种情况中,第一种情况正常编译;第二种情况编译失败,提示index变量未初始化。

究其原因个人猜测分析如下:

在第一种情况中,编译器在执行到if语句的时候,由于true是常量,因而在编译阶段即可判别该index初始化的分支一定会走到,所以编译成功。

在第二种情况中,编译器执行到if语句的时候,由于istrue是变量,所以此时编译器还无法获取其值。因此编译器用以判断index是否初始化的操作,是去判断if可能覆盖的所有分支都初始化了index变量。由于此时仅仅只在if一个分支中初始化index,所以此时会编译出错。

为了验证以上推论,可修改代码如下:

using System;
namespace Wrox
{
    public class Program
    {
        static void Main(string[] args)
        {
            int index; 
            const bool istrue=true; 
            if(istrue == true)
            {                
                index = 100;            
            }            
            Console.WriteLine(index);            
            Console.ReadKey();
            
        }
    }
}

 

以上代码正常编译,故而可佐证上述推论。

关于C#中编译器保证变量必须初始化规则猜想

标签:style   blog   color   ar   sp   div   on   log   代码   

原文地址:http://www.cnblogs.com/li-shuai-love/p/4018130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!