首页 > 代码库 > 关于C#中编译器保证变量必须初始化规则猜想
关于C#中编译器保证变量必须初始化规则猜想
现在两种情况:
第一种情况:
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#中编译器保证变量必须初始化规则猜想
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。