2017-06-12 95 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

在这一点上,它肯定比原来的代码更复杂。我认为这是值得修复的,但如果答案永远不被接受,我可能会删除它。 –