读书人

C#此作用域设计为什么要这样?该怎么解

发布时间: 2012-03-16 16:34:56 作者: rapoo

C#此作用域设计为什么要这样?
程序一
static void Main(string[] args)
{
int i;
string text;

for (i = 0,text= "p "; i < 10; ++i)
{
text = "ggg " + Convert.ToString(i);
Console.WriteLine( "{0} ", text);
}
Console.WriteLine( "lase {0},{1} ", text,i);
Console.ReadKey();
}
程序二
static void Main(string[] args)
{
int i;
string text;

for (i = 0; i < 10; ++i)
{
text = "ggg " + Convert.ToString(i);
Console.WriteLine( "{0} ", text);
}
Console.WriteLine( "lase {0},{1} ", text,i);
Console.ReadKey();
}

程序二编译不通过,显示“错误 CS0165: 使用了未赋值的局部变量“text”“
比较奇怪,C#问什么这样设计?有什么好处吗?
两个不同在于for( )中程序一赋值了,而二没有。


[解决办法]
int i;
string text = " ";

for (i = 0; i < 10; ++i)
{
text = "ggg " + Convert.ToString(i);
Console.WriteLine( "{0} ", text);
}
Console.WriteLine( "lase {0},{1} ", text, i);
Console.ReadKey();

[解决办法]
程序二
static void Main(string[] args)
{
int i;
string text;

for (i = 0; i < 10; ++i)
{
text = "ggg " + Convert.ToString(i);
Console.WriteLine( "{0} ", text);


}
Console.WriteLine( "lase {0},{1} ", text,i);
Console.ReadKey();
}

程序二编译不通过,显示“错误 CS0165: 使用了未赋值的局部变量“text”“
比较奇怪,C#问什么这样设计?有什么好处吗?
两个不同在于for( )中程序一赋值了,而二没有。


_________________________________

此问题跟变量的作用域无关。你在此程序中定义text的时候赋给一个初始值就正确了。
[解决办法]
编译器没有这样智能,也没有必要这样智能
否则每次编译的时候还得把你的代码执行一遍

编译器到不了for()这个级别
for (i = 20; i < 10; ++i)
for (i = 0; i < 10; ++i)
这样当然好判断

如果是这样?
for (i = int.Parse(Console.ReadLine()); i < 10; ++i)

你让编译器怎么判断

研究这个没有意义,编译的结果已经告诉你不行

“为什么这样设计呢?”这是语法规则,没有这多的为什么

不爽就自己设计个语言,打败C#

我从精神上支持你

读书人网 >C#

热点推荐