前提条件:sr是一个StreamReader具体代码:while((string s = sr.ReadLine())!=null){//things to do}这一段会报错,如果把s放在循环外部声明并赋值,那么就不会报错,请问下这是怎么回事呢?还有,这样的话在for循环里面有可以定义变量,感觉有点矛盾啊!
原则上是可以的,而且这种写法也很常见,没有看到具体的语境我也不好下判断。但他与for中的变量完全是不一样的!for循环中的变量声明在了第一节,也就是第一个分号前,不管for执行了多少次,那个只会执行一次,不会执行多次的。而while只是相同于执行了for循环的中间条件部分而已,在条件部分是每次都要执行的!
例如for(int i = 0;i<10;i++)代码中,int i=0只仅仅被执行了一次,而后两个才会多次执行,所以这时的定义与while中的不一样,而while中相当于只执行了i<10这一句而已。
但我肯定的是你的那个写法也是正确的,可能是语境哪里个地方出错了。以前这种写法多了去了!但现在你不妨这样写:
while(!sr.EndOfStream)
{
string s = sr.readline();
//something to do;
}
这种与你的写法效率上来说是等同的!
例如for(int i = 0;i<10;i++)代码中,int i=0只仅仅被执行了一次,而后两个才会多次执行,所以这时的定义与while中的不一样,而while中相当于只执行了i<10这一句而已。
但我肯定的是你的那个写法也是正确的,可能是语境哪里个地方出错了。以前这种写法多了去了!但现在你不妨这样写:
while(!sr.EndOfStream)
{
string s = sr.readline();
//something to do;
}
这种与你的写法效率上来说是等同的!
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-04-28
在while里面定义变量表示每次循环都定义一个新变量,只是名字相同而已,每次都是新对象。而for循环的for(int i=0;...)这里的int i=0只是初始化,只一次。之所for循环这样演进是为了保证代码完整性,因为以前要把int i=0放在外面,甚至不再for循环之前,中间有可能被改变。
第2个回答 2012-04-28
while(sr.ReadLine()!=null)
{
}
{
}
第3个回答 2012-05-11
可能是你在while之外声明sr吧,while循环他只是局部变量循环了。
第4个回答 2012-04-28
while里面不允许定义变量,这么多年写下来,至于为啥不清楚,反正知道不可以。你这个问题应该到msdn上问问。
第5个回答 2012-05-02
while循环跟的条件是返回一个布尔值的判断句