关于C#变量作用域的一个问题

a:boolistrue=true;if(istrue==true){index=100;}与a:if(true){index=100;}的区别在学变量作用域的时候偶然发... a:bool istrue = true;if (istrue==true) {index = 100;}与a:if(true) {index = 100;}的区别
在学变量作用域的时候偶然发现的,先定义一个局部变量index,然后在判断体内初始化,a情况index在判断体外初始化的值会丢失而B情况则不会丢失初始化的值
一下是源代码
int index;
// bool istrue = true;
if (true) {
index = 100;
}
Console.WriteLine(index);
Console.ReadKey();
看来诸位还不清楚我这个问题
那就再补充一下
int index;
bool istrue=true;
if(true){
index = 100;
}
Console.WriteLine(index);
Console.ReadKey();
以上代码是可以运行的
但是以下代码是不可以运行的,错误是使用了未赋值的局部变量“index”
int index;
bool istrue=true;
if(istrue){
index = 100;
}
Console.WriteLine(index);
Console.ReadKey();
这两段代码的区别在于if的条件不同
按正常的情况下,在if块里面初始化的变量,其值的作用域仅限于if块内,换句话说就是在if块以外该变量仍是未初始化的
但是if的条件绝对为真的情况下(if(true)),即使变量是在if块里面初始化,在if块外面初始化依然仍然不会消失
我开始时认为会不会是,如果(if(true))的话,编译器就会忽略if块,把块里面的语句当成外部语句执行,但是后来发现还是不对,我在if块(if(true))内定义了一个变量,外部依然访问不到,所以我想问一下这到底是什么机制
展开
 我来答
流程不止
2009-07-28
知道答主
回答量:11
采纳率:0%
帮助的人:18.8万
展开全部
确实是个问题。挺有洞察力的。

下面是我的看法:
你的代码可能是:
A情况:
int index;
bool istrue = true;
if(istrue)
{
index=100;
}
Console.WriteLine(index);
Console.ReadKey();
B情况:
int index;
if(true)
{
index=100;
}
Console.WriteLine(index);
Console.ReadKey();
问题在于:
A情况if 判断不完全(缺少else),
变量 bool istrue可能为false 而不能进入if模块体内
使Int index 可能未赋值,一般会编译报错。

B情况if判断语句为永真;故顺利通过内部初始化。

改一下:
A情况:
int index;
bool istrue = true;
if (istrue == true)
{
index = 100;
}
else
{
index = 22;
}
这是一个算法严密正确与否的问题。
也可以理解为编译器强大无漏洞的表现。
lu_hua
2009-07-25 · TA获得超过238个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:0
展开全部
不明白你什么意思,但我看你这段代码会报错:
"您使用了未赋值的变量index".
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
364434006
2009-07-25
知道答主
回答量:31
采纳率:0%
帮助的人:19.3万
展开全部
你说a情况的值会丢失。你是怎么知道的。是运行的结果不是你所想的.
难道两次运行的结果不一致..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式