无法在 C# 中打印来自相同 class 的属性

Unable to print the properties from same class in c#

编写一个 C# 程序,获取一个人的出生日期作为输入并计算 his/her 年龄并显示年龄。该程序还应检查此人是否是成年人或 child。 显示示例输出中给定的结果。 创建一个名为 Person 的 class。 如下所示创建字段、属性和方法。enter image description here

从包含 Main 方法的 class 调用程序为 person 创建 objects,并显示 DisplayDetails 方法的详细信息。

注:

不要创建新的命名空间。

使用公共访问说明符创建 classes。

严格遵守命名约定。

样本输入:1

输入名字

爱丽丝

输入姓氏

摩西

以yyyy/mm/dd/格式输入出生日期

1998/12/23

示例输出:1

名字:爱丽丝

姓氏:摩西

年龄:19

成人

样本输入:2

输入名字

输入姓氏

诺埃尔

以yyyy/mm/dd/格式输入出生日期

2002/10/15

示例输出:2

名字:爱丽丝

姓氏:摩西

年龄:17

Child

当我尝试 运行 下面的代码时,它没有打印阶段,即成人或 child,我不明白我在这里做错了什么。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_SHARP
{
    public class Person
    {
        private String firstName;
        private String lastName;
        private DateTime dob;
        private String stages;
        public String FirstName
        {
            get
            {
                return firstName;
            }
            set
            {
                firstName = value;
            }
        }
        public String LastName
        {
            get
            {
                return lastName;
            }
            set
            {
                lastName = value;
            }
        }
        public DateTime Dob
        {
            get
            {
                return dob;
            }
            set
            {
                dob = value;
            }

        }
        public String Adult
        {
            get
            {
                return stages;
            }
            set
            {
                if (GetAge(dob) > 18)
                {
                    stages = "Adult";
                }
                else
                {
                    stages = "Child";
                }
            }
        }
        public void DisplayDetails()
        {
            Console.WriteLine("First Name: " + this.firstName);
            Console.WriteLine("Last Name: " + this.lastName);
            Console.WriteLine("Age: "+this.GetAge(dob));
            Console.WriteLine(this.stages);
        }
        public int GetAge(DateTime dob)
        {
            int age = 0;
            age = DateTime.Now.Year - dob.Year;
            return age;
        }
    }

    public class Progarm
    {
        public static void Main(String[] args)
        {
            Person obj = new Person();
            Console.WriteLine("Enter first name");
            obj.FirstName = Console.ReadLine();
            Console.WriteLine("Enter last name");
            obj.LastName = Console.ReadLine();
            Console.WriteLine("Enter date of birth in yyyy/mm/dd/ format");
            obj.Dob = Convert.ToDateTime(Console.ReadLine());
            obj.DisplayDetails();

        }
    }
}

您从未设置 'stages' 字段。

这里可能还有一些其他问题,因为只比较年份的日期不准确,会导致将年龄四舍五入到年份。除此之外,您可以通过进行一些小改动来获得正确打印的内容。

您可以将 Adult 值设置为“”或 String.Empty,这将导致您的 setter 逻辑被执行。然后,这将为阶段变量提供一个可以打印到控制台的值。

            obj.Dob = Convert.ToDateTime(Console.ReadLine());
            obj.Adult = String.Empty;
            obj.DisplayDetails();

您的示例数据的结果:

这个现在工作正常,它通过了 100% 的测试用例。

public String Adult
    {
        get
        {
            if (GetAge(dob) >= 18)
            {
                return "Adult";
            }
            else
            {
                return "Child";
            }
        }
        set
        {}  
    }

对于主要 class,我使用了一个空字符串来为 Adult 属性 赋值。

obj.Dob = Convert.ToDateTime(Console.ReadLine());
        obj.Adult = "";
        obj.DisplayDetails();

Ouput Window