2017-06-12 67 views
-3

我的任務指定我必須創建6個類,現在在這些類中的一個調用(播放器),其中包含通常的名稱,性別等!必須有一種方法可以在幾年內返回玩家的年齡。現在我寫了下面的代碼,但是我覺得它可能不需要太長時間,所以我正在尋找任何有用的建議。C#類和返回值

class Player 
{ 
    private string firstName; 
    private string lastName; 
    private List<string> middleNames; 
    private DateTime birthday; 
    private string nationality; 
    private string gender; 

    public Player(string firstName, string lastName, List<string> middleNames, DateTime birthday, string nationality, string gender) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.middleNames = middleNames; 
     this.birthday = birthday; 
     this.nationality = nationality; 
     this.gender = gender; 
    } 

    public string FirstName 
    { 
     get 
     { 
      return firstName; 
     } 
     set 
     { 
      firstName = value; 
     } 
    } 

    public string LastName 
    { 
     get 
     { 
      return lastName; 
     } 
     set 
     { 
      lastName = value; 
     } 
    } 

    public List<string> MiddleNames 
    { 
     get 
     { 
      return middleNames; 
     } 
     set 
     { 
      middleNames = value; 
     } 
    } 

    public DateTime BirthDay 
    { 
     get 
     { 
      return birthday; 
     } 
     set 
     { 
      birthday = value; 
     } 
    } 

    public string Nationality 
    { 
     get 
     { 
      return nationality; 
     } 
     set 
     { 
      nationality = value; 
     } 
    } 

    public string Gender 
    { 
     get 
     { 
      return gender; 
     } 
     set 
     { 
      gender = value; 
     } 
    } 

    public int GetAge(DateTime currentDate) 
    { 
     int age = currentDate.Year - birthday.Year; 
     if (currentDate.Month - birthday.Month < 0 || (currentDate.Month - birthday.Month == 0 && currentDate.Day - birthday.Day < 0)) 
     { 
      --age; 
     } 

     return age; 
    } 
} 
+4

首先要了解的是:自動實現的屬性。你有71行代碼,可以用6表示。接下來,我建議使用我的[Noda Time項目](http://nodatime.org),這使得執行基於日期的計算變得更容易。現在,這與你的問題標題有什麼關係?這真的只是*關於「我如何計算一個時代」? –

+2

如果是這樣,這是一個https://stackoverflow.com/questions/9重複 - 網站上最古老的問題之一... –

+2

@JonSkeet他們說這是一個任務,推動一個庫isn沒有幫助。 這就是說,這更多的是一個樣式問題,而不是一個實際的編程問題,可能不屬於 –

回答

-2

主要回答變化EDIT

我已經改變了這個答案佔閏年。以前的答案是您的原始解決方案的較短版本,但我不能真誠地發佈我知道不正確的答案。我無法刪除答案,因爲它被接受了,所以我正在改變它。

這裏有一個方法可以做到這一點,但實際上有更多的代碼,你以前有過,因爲如果一個人出生在閏年,這不是閏年,或者如果這是一個閏年,他們是不是在閏年出生,那麼大多數時間看DayOfYear將是不準確的。

我添加了代碼來檢查其中一個或其他(但不是兩個)年份是否爲閏年,並且問題中的dayOfYear大於59(2月28日),然後調整我們使用的年份日期值用於計算:

public static int Age(DateTime today) 
{ 
    var thisDayOfYear = today.DayOfYear; 
    var birthDayOfYear = birthday.DayOfYear; 

    // Normalize day of year for leap years 
    if (DateTime.IsLeapYear(birthday.Year) && 
     !DateTime.IsLeapYear(today.Year) && 
     birthDayOfYear > 59) 
    { 
     birthDayOfYear--; 
    } 
    else if (DateTime.IsLeapYear(today.Year) && 
      !DateTime.IsLeapYear(birthday.Year) && 
      thisDayOfYear > 59) 
    { 
     thisDayOfYear--; 
    } 

    return (thisDayOfYear < birthDayOfYear) 
     ? today.Year - birthday.Year - 1 
     : today.Year - birthday.Year; 
} 
+1

面對閏年,這可能是無效的。 –

+0

@JonSkeet我已經更新了閏年的答案。我認爲現在是準確的,但不確定這是否是採取這種情況的正確行動?我想一個元的問題... –

+0

在這一點上,它肯定比原來的代碼更復雜。我認爲這是值得修復的,但如果答案永遠不被接受,我可能會刪除它。 –