Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法打印c中同一类的属性#_C#_Properties - Fatal编程技术网

C# 无法打印c中同一类的属性#

C# 无法打印c中同一类的属性#,c#,properties,C#,Properties,编写一个C#程序,将一个人的出生日期作为输入,计算他/她的年龄并显示年龄。该程序还应检查此人是成年人还是儿童。 显示示例输出中给出的结果。 创建一个名为Person的类。 创建字段、属性和方法,如下所示 从一个名为Program的类中为person创建对象,该类包含Main方法并显示DisplayDetails方法中的详细信息 注: 不要创建新的名称空间 使用公共访问说明符创建类 严格遵守命名约定 样本输入:1 输入名字 爱丽丝 输入姓氏 摩西 以yyyy/mm/dd/格式输入出生日期 1998

编写一个C#程序,将一个人的出生日期作为输入,计算他/她的年龄并显示年龄。该程序还应检查此人是成年人还是儿童。 显示示例输出中给出的结果。 创建一个名为Person的类。 创建字段、属性和方法,如下所示

从一个名为Program的类中为person创建对象,该类包含Main方法并显示DisplayDetails方法中的详细信息

注:

不要创建新的名称空间

使用公共访问说明符创建类

严格遵守命名约定

样本输入:1

输入名字

爱丽丝

输入姓氏

摩西

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

1998/12/23

样本输出:1

名字:爱丽丝

姓:摩西

年龄:19

成人的

样本输入:2

输入名字

输入姓氏

诺埃尔

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

2002/10/15

样本输出:2

名字:爱丽丝

姓:摩西

年龄:17

孩子

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

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();

        }
    }
}

您从未设置“阶段”字段。

此处可能存在一些其他问题,因为仅按年份比较的日期不准确,导致将年龄四舍五入到年份。除此之外,只需做一点小小的改动,就可以正确打印出所需内容

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

            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
        {}  
    }
对于主类,我使用了一个空字符串为成人属性赋值

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

您从未设置
阶段。我唯一看到它被设置的地方是成人的setter,它从未被调用过。也许你是想将该代码放入设定器中,用于
Dob
?我只是想将年龄与成人财产中的18岁进行比较,但我不明白如何在成人设定方法中使用年龄是的,但有两种可能性,即“成人”或“儿童”这就是为什么我对如何在AdultI的set方法中设置这些值感到困惑的原因。我真的不知道C#是如何工作的,但也许可以使用与“成人.set”中相同的代码创建一个CheckStage方法,然后在“Dob.set”的末尾调用它。是的,这个方法工作得很好,但在实现这个逻辑时,它是这样说的。失败1:未按照要求实施成人财产。做一些改变。看起来您可能需要在Setter中处理它以满足您的要求。如果您可以尝试一下最新版本,看看它是否满足您的要求。是的,它现在工作正常,并且通过了所有案例,我们需要更改成人财产中的代码,我已经做了,您可以检查以下代码。非常感谢你的帮助。