变量的域
比較這兩段代碼:
代碼一:
1int?i;
2????????????string?text;
3????????????for(i=0;i<10;i++)
4????????????{
5????????????????text?=?"Line"?+?Convert.ToString(i);
6????????????????Console.WriteLine("{0}",?text);
7????????????}
8????????????Console.WriteLine("Last?text?output?in?loop:{0}",?text);
9????????????Console.ReadKey(); 代碼二:
1int?i;
2????????????string?text="";
3????????????for(i=0;i<10;i++)
4????????????{
5????????????????text?=?"Line"?+?Convert.ToString(i);
6????????????????Console.WriteLine("{0}",?text);
7????????????}
8????????????Console.WriteLine("Last?text?output?in?loop:{0}",?text);
9????????????Console.ReadKey(); 代碼一錯誤編譯不了:提示--錯誤?1?使用了未賦值的局部變量“text”?
而代碼二可以編譯通過。
原因:主要涉及到分配給text變量的內存空間,實際上任何變量都是這樣。只聲明一個簡單的變量類型,并不會引起其他的變化。
只有在給變量賦值后,這個字才占用一塊內存空間。如果這種占據內存空間的行為在循環中發生,該值實際上定義為一個局部值,在循環的外部會超出其作用域。
代碼一:
1int?i;
2????????????string?text;
3????????????for(i=0;i<10;i++)
4????????????{
5????????????????text?=?"Line"?+?Convert.ToString(i);
6????????????????Console.WriteLine("{0}",?text);
7????????????}
8????????????Console.WriteLine("Last?text?output?in?loop:{0}",?text);
9????????????Console.ReadKey(); 代碼二:
1int?i;
2????????????string?text="";
3????????????for(i=0;i<10;i++)
4????????????{
5????????????????text?=?"Line"?+?Convert.ToString(i);
6????????????????Console.WriteLine("{0}",?text);
7????????????}
8????????????Console.WriteLine("Last?text?output?in?loop:{0}",?text);
9????????????Console.ReadKey(); 代碼一錯誤編譯不了:提示--錯誤?1?使用了未賦值的局部變量“text”?
而代碼二可以編譯通過。
原因:主要涉及到分配給text變量的內存空間,實際上任何變量都是這樣。只聲明一個簡單的變量類型,并不會引起其他的變化。
只有在給變量賦值后,這個字才占用一塊內存空間。如果這種占據內存空間的行為在循環中發生,該值實際上定義為一個局部值,在循環的外部會超出其作用域。
轉載于:https://www.cnblogs.com/yfcomeon/archive/2007/10/25/937308.html
總結
- 上一篇: IIS6+asp.net 2.0+HTT
- 下一篇: .Net - Lambda 表达式