You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

预期输出

qnyresult
2112
3111223
41111222334

错误信息(翻译后)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:50:31