2

我是 C# 新手,我正在尝试弄清楚如何使用单独的方法来修改变量。我发布的代码就是我正在处理的代码,虽然我知道有更好、更简单的方法来做这件事,但我不得不使用给定的参数。

因此,对于代码,我需要有多种方法,并且我正在尝试从第一种方法中生成/获取变量,在第二种方法中对其进行修改,然后在第三种单独的方法中使用该修改后的变量。但我不确定我是否了解我需要什么方法类型,或者我是否需要使用 ref、out 等。

到目前为止,我在这里发布的代码(两种方法最终会将变量拉入第三种方法)还没有抛出任何错误,但我认为它不会满足我的需要。

我试图在第一种方法中采用ascore,midScorefinalscore,然后在第一种方法中对其进行tryparsedtryparse后对其进行修改,然后将最终的 tryparsed /modified 变量用于我的第三种方法计算。有人告诉我,第一种方法需要使用 bool,第二种方法也需要使用 void。所以我不知道如何从前两种方法中尝试解析和修改我的最终 ascore、midScore 和 finalscore 变量,以用于我的第三种方法。

    private bool DoGrades(out decimal ascore, out decimal midScore, out decimal finalscore)
    {

        if (decimal.TryParse(assignmentBox.Text, out ascore) && (ascore <= 100) && (ascore >= 0))
        {
            if (decimal.TryParse(midtermBox.Text, out midScore) && (midScore <= 100) && (midScore >= 0))
            {
                if (decimal.TryParse(finalBox.Text, out finalscore) && (finalscore < 100) && (finalscore >= 0))
                {
                    IsTrue = true;
                    return IsTrue;
                }

                else
                {
                    MessageBox.Show("Input must be between 0 and 100");
                    assignmentBox.Text = "";
                    midtermBox.Text = "";
                    finalBox.Text = "";
                    finalBox.Focus();
                    IsTrue = false;
                }
            }

            else
            {
                MessageBox.Show("Input must be between 0 and 100");
                assignmentBox.Text = "";
                midtermBox.Text = "";
                finalBox.Text = "";
                midtermBox.Focus();
                IsTrue = false; 
            }
        }
        else
        {
            MessageBox.Show("Input must be between 0 and 100");
            assignmentBox.Text = "";
            midtermBox.Text = "";
            finalBox.Text = "";
            assignmentBox.Focus();
            IsTrue = false; 
        }
        DoGrades(out ascore, out midScore, out finalscore);

        return true;
    }

    private void BonusPoints (ref decimal itMajor, ref decimal lovingIt)
    {

        if (itMajorCheck.Checked)
        {
            itMajor = 10;
        }
        else
        {
            itMajor = 0;
        }

        if (lovingCheck.Checked)
        {
            lovingIt = 10;
        }
        else
        {
            lovingIt = 0;
        }

        ascore = ascore + itMajor + lovingIt;
        midScore = midScore + itMajor + lovingIt;
        finalscore = finalscore + itMajor + lovingIt;

    }
4

1 回答 1

1
  1. 我的猜测是你误解了这个问题。
  2. 我不知道你为什么要在 inside 调用DoGradesDoGrades那只会创建一个无限递归循环。DoGrades否则似乎很好。
  3. BonusPoints似乎是你的主要误解。itMajor变量和lovingIt变量没有意义ref,因为任何传入的值都不会被使用并且总是被覆盖。(我也不明白为什么奖金会分成两个变量,但无论如何。)
  4. 我猜你的老师想要第三种计算方法来通过引用接受所有值。这是它实际上可以达到目的的唯一一点,尽管通过奖金ref是不必要的。

代码

void CaclulateScores() 
{
  decimal aScore;
  decimal midScore;
  decimal finalScore;
  decimal itBonus;
  decimal lovingBonus;

  if (DoGrades(out aScore, out midScore, out finaleScore)) 
  {
     BonusPoints(out itBonus, out lovingBonus);
     // I assume you this is what your last method signature is.
     ApplyBonus(ref aScore, ref midScore, ref finaleScore, itBonus, lovingBonus);
  }
}

void BonusPoints (out decimal itBonus, out decimal lovingBonus) 
{
  itBonus = (itMajorCheck.Checked) ? 10 : 0;
  lovingBonus = ((lovingCheck.Checked) ? 10 : 0;
}

void ApplyBonus(ref aScore, ref midScore, ref finaleScore, ref bonus, itBonus, lovingBonus)
{
  aScore += itBonus + lovingBonus;
  midScore += itBonus + lovingBonus;
  finaleScore += itBonus + lovingBonus;
}
于 2013-11-09T22:16:12.347 回答