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

使用ref关键字处理数组数学运算时遭遇CS7036错误的求助

问题分析与解决方案

错误原因(CS7036)

当调用带有ref参数的方法时,必须传递一个已初始化的变量并在参数前加上ref关键字。直接传递GetTemperatures()的返回值(临时值)不符合要求,因为ref需要引用可寻址的变量。此外代码中还存在其他逻辑错误,以下是完整修正方案:


修正后的GetTemperatures方法

原方法存在数组访问错误和类型错误(尝试对int调用Substring),修正后正确展示二维数组:

public int[,] GetTemperatures()
{
    int[,] dailyTemperature =
    {
        {38, 40, 42, 34},
        {55, 41, 40, 30},
        {28, 39, 21, 60},
        {61, 52, 43, 42},
        {35, 36, 30, 29},
        {24, 33, 37, 40}
    };

    Console.WriteLine("原二维温度数组:");
    for (int i = 0; i < dailyTemperature.GetLength(0); i++)
    {
        for (int j = 0; j < dailyTemperature.GetLength(1); j++)
        {
            Console.Write(dailyTemperature[i, j] + "\t");
        }
        Console.WriteLine();
    }
    return dailyTemperature;
}

修正后的GetTemperatureSum方法

原方法存在变量作用域错误、数组访问错误,且ref关键字无必要(未修改输入数组),修正后通过循环计算每行总和:

public int[] GetTemperatureSum(int[,] dailyTemperature)
{
    int rowCount = dailyTemperature.GetLength(0);
    int colCount = dailyTemperature.GetLength(1);
    int[] temperatureSum = new int[rowCount];

    for (int i = 0; i < rowCount; i++)
    {
        int sum = 0;
        for (int j = 0; j < colCount; j++)
        {
            sum += dailyTemperature[i, j];
        }
        temperatureSum[i] = sum;
    }

    Console.WriteLine("\n每行温度总和数组:");
    foreach (int sum in temperatureSum)
    {
        Console.Write(sum + "\t");
    }
    Console.WriteLine();

    return temperatureSum;
}

正确的Main方法调用方式

在do...while循环中正确调用两个方法,避免CS7036错误:

static void Main(string[] args)
{
    Weather weather = new Weather();
    bool continueDisplay;

    do
    {
        int[,] tempArray = weather.GetTemperatures();
        weather.GetTemperatureSum(tempArray);

        Console.WriteLine("\n是否继续展示?(Y/N)");
        continueDisplay = Console.ReadLine().Trim().Equals("Y", StringComparison.OrdinalIgnoreCase);

    } while (continueDisplay);
}

关键修正点总结

  • 移除不必要的ref关键字:方法仅读取二维数组值,无需修改原数组,去掉ref简化调用逻辑。
  • 修复数组访问逻辑:二维数组必须用[i,j]访问,一维数组不能调用GetLength(1)。
  • 调整变量作用域:将temperatureSum数组声明在循环外部,避免重复初始化。
  • 替换硬编码求和:用循环实现求和,适配数组行数/列数变化的场景。
  • 规范参数传递:先将GetTemperatures()返回值存入变量,再传递给求和方法。

内容的提问来源于stack exchange,提问作者ronalddonaldronald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:45