2013-05-14 93 views
1

我有一個簡單的問題,但我作爲一個新手卡住了。從方法設置只讀屬性

我的SetGrade方法需要一個浮點參數,我希望它返回一個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

什麼是'Mgrade',你爲什麼要分配給它?爲什麼你的'Grade'屬性在訪問修飾符中有一個大寫'P'? (C#區分大小寫) – 2013-05-14 16:36:37

+0

你真的只想返回'A'或'F' - 或者你想返回「A」,「B」,「C」,「D」,「E」或「F」取決於「等級」? – 2013-05-14 16:42:35

回答

2

你的語法有點過:

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

無需爲Mgrade變量,你應該簡單地返回,而不是一個任務,並返回字符通緝。

+0

if語句中也不需要:) – 2013-05-14 16:43:21

+0

@ taras.roshko - 如果你的意思是你可以使用條件運算符,當然。 – Oded 2013-05-14 16:44:11

+0

是的,但實際上我同意Eric的觀點,代碼中有很多其他問題,包括奇怪的命名(或者SetGrade方法中缺少道具分配) – 2013-05-14 16:46:11

6

無需將您的角色分配給中間變量char變量。只需返回像這樣的正確的字符。

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

整個函數的內容甚至可以簡化爲'return score> = 90.0 ? 'A':'F'; – 2013-05-14 16:41:21

+1

@DavidS .:給出的代碼可能是實際代碼的簡化版本。 – 2013-05-14 16:44:36

+0

@EricLippert絕對,我只是想指出這樣的事情,因爲我讀了很多不必要的長代碼:) – 2013-05-14 16:46:55

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可以從任何地方讀取並從這個類中寫入。

+0

啊,我明白了!我確實打算分配Grade屬性。謝謝埃裏克! – 2013-05-14 16:59:14

+0

@RickWalker:不客氣。歡迎來到Stack Overflow。 – 2013-05-14 17:03:51