我有一个简单的问题,但我被困在一个新手.
我的SetGrade方法采用float参数,我希望它返回一个char,然后将该值设置为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';
}
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 15
此代码存在许多问题,但它们可能不是您认为的那样.
首先,Public是错的; C#需要public.
其次,使用本地Mgrade是奇怪和不必要的,但有趣的是,实际上并没有错 ; 在这样的一步中完成任务和返回是合法的.但在这种情况下你不需要; 只是return 'A';没有地方分配.
第三,该方法名称错误,因为它没有设置Grade属性.如果您打算设置等级,则返回无效:
public void SetGrade(float score)
{
if(score >= 90.0)
{
this.grade = 'A';
}
this.grade = 'F';
}
Run Code Online (Sandbox Code Playgroud)
相反,如果该方法是从浮点数到字符的转换,那么它应该是静态的:
public static char ScoreToGrade(float score)
{
if(score >= 90.0)
{
return 'A';
}
return 'F';
}
Run Code Online (Sandbox Code Playgroud)
坦率地说,我倾向于两者兼顾:
public void SetGrade(float score)
{
this.grade = ScoreToGrade(score);
}
Run Code Online (Sandbox Code Playgroud)
在那里,现在你已经拥有了两全其美的优势.
第四,这只是一个风格点; 你可能会考虑:
public char Grade { get; private set; }
Run Code Online (Sandbox Code Playgroud)
编译器将为您生成"隐形"后备字段,因此您无需自行管理.这种语法意味着Grade可以从任何地方读取并从此类中写入.
无需将角色分配给中间char变量.只需返回正确的字符.
public char SetGrade(float score)
{
if(score >= 90.0)
{
return 'A';
}
return 'F';
}
Run Code Online (Sandbox Code Playgroud)