关于c#的作用域问题

泛用人形代码复制机 2012-09-26 10:16:33
for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
string str = "";
str = "";
}

这样 两句 string str = "";会报错,但第二个str已经离开了第一个的作用域了。

for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
string str2 = "";
str = "";
}
下面的str找不到定义

谁能解释下这种情况?
...全文
229 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdjkalfjklajdf 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

第二种情况就是外层没有定义,很容易理解

第一种情况是为了减少bug设置的规则。理论上可以,但是很容易产生错误,应该用两个变量名。
[/Quote]
我觉得这个解释靠谱,2楼说的3个规则不怎么严谨。
ZWYyj 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
规则一:同属一个函数的变量,不能定义两次
规则二:一个变量如果在某个作用于内定义,作用域外则不能访问
规则三:允许同一个变量在不同的作用域内定义。

对于你的情况,这样写就可以通过:

C# code
for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
{
string str = "";
……
[/Quote]

+1赞一个

for (int i = 0; i < 5; i++)
{
string str = "";//你的str字段在for循环里定义了,
str = "";
}
string str2 = "";
str = "";//但是循环外,你未定义。
}
下面的str找不到定义

csdn_风中雪狼 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
规则一:同属一个函数的变量,不能定义两次
规则二:一个变量如果在某个作用于内定义,作用域外则不能访问
规则三:允许同一个变量在不同的作用域内定义。

对于你的情况,这样写就可以通过:

C# code
for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
{
string str = "";
……
[/Quote]
+1
支持这个,解释很到位
熙风 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

规则一:同属一个函数的变量,不能定义两次
规则二:一个变量如果在某个作用于内定义,作用域外则不能访问
规则三:允许同一个变量在不同的作用域内定义。

对于你的情况,这样写就可以通过:
C# code
for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
{
string str = "";
str = "……
[/Quote]

这个说的很到位
宝_爸 2012-09-26
  • 打赏
  • 举报
回复
第二种情况就是外层没有定义,很容易理解

第一种情况是为了减少bug设置的规则。理论上可以,但是很容易产生错误,应该用两个变量名。
缭绕飘渺 2012-09-26
  • 打赏
  • 举报
回复
我还真没去深究过
使用switch case语句
在case中定义的变量一样出楼主说的问题
等明白人来说个明白答案
qldsrx 2012-09-26
  • 打赏
  • 举报
回复
规则一:同属一个函数的变量,不能定义两次
规则二:一个变量如果在某个作用于内定义,作用域外则不能访问
规则三:允许同一个变量在不同的作用域内定义。

对于你的情况,这样写就可以通过:
for (int i = 0; i < 5; i++)
{
string str = "";
str = "";
}
{
string str = "";
str = "";
}
thegreensea 2012-09-26
  • 打赏
  • 举报
回复
下面的 str 在for 循环的外面了,而 str 是在for 里面定义的,所以找不到定义 。

110,536

社区成员

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

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

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