现在两种情况:
第一种情况:
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(); } } }
以上代码正常编译,故而可佐证上述推论。