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

h9999h 2007-03-20 07:10:53
程序一
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( )中程序一赋值了,而二没有。
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2007-03-20
  • 打赏
  • 举报
回复
编译器没有这样智能,也没有必要这样智能
否则每次编译的时候还得把你的代码执行一遍

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

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

你让编译器怎么判断

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

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

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

我从精神上支持你
h9999h 2007-03-20
  • 打赏
  • 举报
回复
我的意思是想知道这样设计C#的原因?
那在for() 内算初始化。
在for{}内就不算。
为什么这样设计呢?我觉得要是在for{}内赋值了,就算初始化了不也很好吗?
江城老温 2007-03-20
  • 打赏
  • 举报
回复
程序二
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的时候赋给一个初始值就正确了。
王集鹄 2007-03-20
  • 打赏
  • 举报
回复
C#中为了增强程序的健壮性,局部变量读取的时候必须有确定的值
for (i = 20; i < 10; ++i)
{
....
}
假设for循环不被执行,那么text将是一个不确定的值,所以报错!
王集鹄 2007-03-20
  • 打赏
  • 举报
回复
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();

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧