C# 该函数没有';t在while循环中响应计数器

C# 该函数没有';t在while循环中响应计数器,c#,function,while-loop,C#,Function,While Loop,所以我做了一个while循环,要达到12个等级。计数器从0开始。在Main()方法中,我调用函数gradeFunction(),但在执行之后,它不会对计数器进行任何更改 Program p = new Program(); string name = Console.ReadLine(); int gradesPassed = 12; int currentGrade = 0; double totalSumOfGrades = 0; while(currentGrade <= grade

所以我做了一个
while
循环,要达到12个等级。计数器从0开始。在
Main()
方法中,我调用函数
gradeFunction()
,但在执行之后,它不会对计数器进行任何更改

Program p = new Program();
string name = Console.ReadLine();
int gradesPassed = 12;
int currentGrade = 0;
double totalSumOfGrades = 0;
while(currentGrade <= gradesPassed)
{
    double finalGrade = double.Parse(Console.ReadLine());
    p.gradeFunction(finalGrade, totalSumOfGrades,     currentGrade);
}

如@Jeremy所说,尝试以下方法:

Program p = new Program();
string name = Console.ReadLine();
int gradesPassed = 12;
int currentGrade = 0;
double totalSumOfGrades = 0;
while (currentGrade <= gradesPassed)
{
    double finalGrade = double.Parse(Console.ReadLine());
    gradeFunction(finalGrade, ref totalSumOfGrades, ref currentGrade);
}
我已经在调用和声明中添加了
currentGrade
totalSumOfGrades
的ref关键字,以便正确更新变量,我认为这是使代码工作的最无影响的方式。

代码

    Console.ReadLine();
    double totalSumOfGrades = 0;

    for(var currentGrade = 0; currentGrade <= 12; currentGrade++)
    {
        var finalGrade = double.Parse(Console.ReadLine());
        if (finalGrade >= 4.00)
        {
            totalSumOfGrades += finalGrade;
        }
    }
Console.ReadLine();
两倍总等级之和=0;
对于(var currentGrade=0;currentGrade=4.00)
{
总等级总和+=最终等级;
}
}

将更简单、更直接。

按值传递。
grade函数中的
currentGrade
与调用者中的函数不同。它是值的副本。更改它不会更改原始文件。使用
out
或返回值。按引用(按引用)或值查找传递的参数。费尔多说了些什么。作为学习参考:你真的需要一种方法来完成这项任务吗?我只是想弄清楚它是如何在这个家庭作业中工作的P似乎不理解它,那么你为什么不解释一下你做了哪些改变来使它工作呢?啊,对不起,我已经在调用和声明中为
currentGrade
totalSumOfGrades
添加了
ref
关键字,以便正确更新变量,我认为这是最无影响的代码工作方式是的,我刚刚得到了它的工作方式,但它还需要在finalGrade前面添加ref关键字。谢谢如果您为原始的
finalGrade
分配了一个新值,那么是的,但是如果您只是传递了我认为您当前代码正在执行的值,因为它在循环的每次迭代中都会重新生成值,那么这应该是不必要的。是的,事实证明这是不必要的
public static void gradeFunction(double finalGrade, ref double totalSumOfGrades, ref int currentGrade)
        {
            if (finalGrade >= 4.00)
            {
                totalSumOfGrades += finalGrade;
                currentGrade++;
            }

        }
    Console.ReadLine();
    double totalSumOfGrades = 0;

    for(var currentGrade = 0; currentGrade <= 12; currentGrade++)
    {
        var finalGrade = double.Parse(Console.ReadLine());
        if (finalGrade >= 4.00)
        {
            totalSumOfGrades += finalGrade;
        }
    }