1

我有一个简单的问题,但我作为一个新手被困住了。

我的SetGrade方法采用一个浮点参数,我希望它返回一个字符,然后将该值设置为 Grade 属性。

我没有正确地做某事。

public Class Student {
    private char grade;

    public char Grade { get { return grade; } }

    public char SetGrade(float score) {
        char Mgrade;
        if(score >= 90.0) {
            return Mgrade = 'A';
        }
        return Mgrade = 'F';
     }
}
4

3 回答 3

15

这段代码有很多问题,但它们可能不是你想象的那样。

首先,Public是错误的;C# 需要public.

其次,局部的使用Mgrade是奇怪和不必要的,但有趣的是,实际上并没有;像这样一步完成分配和返回是合法的。但在这种情况下,您不需要;只是return 'A';没有本地分配。

第三,该方法命名错误,因为它没有设置Grade属性。如果你打算用它来设置成绩,那么它应该是无效的返回:

public void SetGrade(float score)
{
   if(score >= 90.0)
   {
      this.grade = 'A';
   }
   this.grade = 'F';
} 

如果相反,该方法旨在从浮点数转换为字符,那么它应该是静态的:

public static char ScoreToGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
} 

坦率地说,我倾向于两者都做:

public void SetGrade(float score)
{
  this.grade = ScoreToGrade(score);
} 

在那里,现在你已经两全其美了。

第四,这只是一个风格点;你可能会考虑:

  public char Grade { get; private set; }

编译器将为您生成一个“不可见”的支持字段,因此您不必自己管理它。这种语法意味着Grade可以从任何地方读取并从此类中写入。

于 2013-05-14T16:42:17.180 回答
6

无需将您的角色分配给中间char变量。只需像这样返回正确的字符。

public char SetGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
}
于 2013-05-14T16:32:59.883 回答
2

你的语法有点偏离:

  public char SetGrade(float score)
  {
     if(score >= 90.0)
     {
       return 'A';
     }
     return 'F';
  }

不需要Mgrade变量,你应该简单地返回想要的字符,而不是赋值和返回。

于 2013-05-14T16:32:54.073 回答