我有一个简单的问题,但我是一个新手。
我的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';
}
}
答案 0 :(得分: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
并从该类中写入。{/ p>
答案 1 :(得分:6)
无需将角色分配给中间char
变量。只需返回正确的字符。
public char SetGrade(float score)
{
if(score >= 90.0)
{
return 'A';
}
return 'F';
}
答案 2 :(得分:2)
你的语法有点不对:
public char SetGrade(float score)
{
if(score >= 90.0)
{
return 'A';
}
return 'F';
}
不需要Mgrade
变量,您只需返回所需的字符,而不是返回作业。