C#代码变量作用域等错误求助:无法在for循环中使用qny、B、C
C#代码错误修复与实现
问题描述
我是C#编程新手,想要将一个Scratch旧项目改用C#实现,但编写的代码出现多个错误。核心问题是无法在for循环中使用qny、B、C变量,仅ADD变量无报错。
原代码
int qny = 4; int ADD = 1; int B = 1; string C = " "; for (int i = 0; i < qny; i++) ; { int R = qny + ADD; for (int i = 0; i < R; i++) ; { string C = string.Join(C, B); } int qny = qny - 1; int B = B + 1; } Console.WriteLine(C);
预期输出
| qny | result |
|---|---|
| 2 | 112 |
| 3 | 111223 |
| 4 | 1111222334 |
错误信息(翻译后)
Error CS0841 局部变量“qny”在声明之前无法使用。变量必须先声明后使用。 Error CS0136 不能在此范围内声明名为“C”的局部变量,因为该名称在父级或当前/子级范围中已用于表示其他内容 Error CS0165 使用了未赋值的局部变量“C” Error CS0841 局部变量“B”在声明之前无法使用。 Error CS0136 不能在此范围内声明名为“qny”的局部变量,因为该名称在父级或当前/子级范围中已用于表示其他内容 Error CS0136 不能在此范围内声明名为“B”的局部变量,因为该名称在父级或当前/子级范围中已用于表示其他内容
修复后的代码
int qny = 4; int ADD = 1; int B = 1; string C = ""; // 初始化空字符串,而非空格 // 移除for循环后的分号,让后续代码块成为循环体 for (int i = 0; i < qny; i++) { int R = qny + ADD; // 内部循环使用不同的变量名j,避免与外部循环的i混淆 for (int j = 0; j < R; j++) { // 直接拼接字符串,无需重复声明C C += B.ToString(); } // 直接修改外部变量,不要重新声明 qny -= 1; B += 1; } Console.WriteLine(C);
错误原因与修复说明
- 循环结构错误:原代码中for循环末尾的分号
;会让循环体变为空语句,后续的{}是独立代码块,完全不参与循环逻辑。移除分号后,代码块才会成为循环的执行体。 - 变量重复声明:循环内部重新用
int qny、int B、string C声明变量,会创建同名的局部变量,覆盖外部变量,甚至出现“声明前使用”的错误(比如int qny = qny -1中,右侧的qny是刚声明的局部变量,尚未赋值)。直接修改外部已声明的变量即可解决。 - C变量初始化与用法错误:原代码将C初始化为空格
" ",且错误使用string.Join(该方法用于合并集合元素,而非字符串拼接)。改为初始化空字符串"",并直接用+=拼接B的字符串形式,符合需求逻辑。 - 循环变量重复:两个for循环都使用
int i,虽然语法上允许,但容易混淆,改为j提升代码可读性。
内容的提问来源于stack exchange,提问作者user20618074
相关产品推荐
相关产品推荐

