【问题标题】:Exercise: Add a DateOfBirth property to your class练习:将 DateOfBirth 属性添加到您的类
【发布时间】:2018-01-09 23:16:19
【问题描述】:

我正在 .Net Academy 上编写教程系列,但遇到了问题。他们并没有真正有用的帮助部分,所以我想知道这里是否有人可以帮助我。我的问题是我认为我的代码是正确的,但我得到了这个错误:

并非所有要求都已满足。
您必须声明一个名为 DateOfBirth 的 DateTime 属性

这是我的代码:

using System;

public class Person
{
    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public int Age {get; set;}

    public string GetFullName()
    {
        return FirstName + " " + LastName;
    }

    public int DateOfBirth()
    {
        return DateTime.Now.AddYears(-Age).Year;
    }
}
public class Program
{
    public static void Main()
    {

    }
}

【问题讨论】:

  • 你可以google一下如何在类中添加一个DateTime属性。
  • 你的DateOfBirth是一个方法而不是一个属性,它的类型是int而不是DateTime。
  • 另外,请注意return DateTime.Now.AddYears(-Age).Year; 是一个非常错误的实现
  • 感谢所有给我正确解决方案的人!

标签: c# .net


【解决方案1】:

这个:

public int DateOfBirth()
{
    return DateTime.Now.AddYears(-Age).Year;
}

不是属性,but a method。不过,您可以轻松地将其转换为属性:

public int DateOfBirth
{
    get { return DateTime.Now.AddYears(-Age).Year; }
}

有关properties in C#的描述请参阅文档

由于类型是 int 而不是必需的 DateTime,因此您可能仍然会遇到问题。跳过.Year引用,返回整个DateTime结构,最后更新属性签名:

public DateTime DateOfBirth
{
    get { return DateTime.Now.AddYears(-Age); }
}

【讨论】:

    【解决方案2】:

    您有一个名为 DateOfBirth 的方法,它应该是这样的属性:

    public DateTime DateOfBirth
    {
            get { return DateTime.Now.Date.AddYears(-Age); }
    }
    

    注意使用 .Date after now 来获取日期而不是时间部分。

    【讨论】:

      【解决方案3】:

      您应该将 DateOfBirth 声明为这样的属性

      public DateTime DateOfBirth {get; set;}
      

      年龄应该是一个计算属性,而不是像这样

       public int Age 
              {
                  get
                     {
                      return DateTime.Now.Year - DateOfBirth.Year;
                     }    
              }
      

      【讨论】:

      • 感谢@ClearLogic 帮助我。那行得通。我忘了添加作业是什么:“将 DateOfBirth 属性添加到您的班级,它的类型为 DateTime。”我只需要第一部分,但看到第二部分也帮助我进一步理解。谢谢:)
      • 同样你可以将GetFullName方法转换成一个getter only属性FullName
      • 当然,如果您将Age 更改为计算属性(应该是,因为它会更改但出生日期不会更改),那么您需要将DateOfBirth 更改为常规(非计算)属性。否则,您将有两个属性试图从另一个计算它们的值并有一个无限循环。
      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多