以下 c# 代码中 属性 成人的堆栈溢出异常
stack overflow exception for the property adult in the below c# code
该代码用于获取用户的输入,例如他们的姓名和出生日期以及 return 姓名和年龄以及他们是否 child 等详细信息
除了 Adult 属性 其余代码工作正常
using System;
using System.IO;
public class Person
{
//Fill code here
private string firstName;
private string lastName;
private DateTime dob;
//private string adult;
public string FirstName
{
set { firstName = value; }
get { return firstName; }
}
public string LastName
{
set { lastName = value; }
get { return lastName; }
}
public DateTime Dob
{
set { dob = value; }
get { return dob; }
}
}
在下面 属性 它必须检查年龄和 return 如果年龄大于或等于 18 岁则为“成人”,否则为“Child”。
根据问题,我无法为此声明该字段。
public string Adult
{
get
{
return Adult;
throw (Whosebug)
}
set
{
if (GetAge(dob) >= 18)
{
Adult = "Adult";
}
else
{
Adult = "Child";
}
}
}
帮我修正上面的问题属性,让它不会抛出任何异常,以及抛出异常的原因
public void DisplayDetails()
{
Console.WriteLine("First Name: {0}", firstName);
Console.WriteLine("Last Name: {0}", lastName);
int age = GetAge(dob);
Console.WriteLine("Age: {0}",age);
Console.WriteLine(Adult);
}
public int GetAge(DateTime dob)
{
int age = 0;
age = DateTime.Now.Year - dob.Year;
return age;
}
}
public class Program
{
public static void Main(String[] args)
{
//Fill code here
Person p = new Person();
Console.WriteLine("Enter first name");
p.FirstName = Console.ReadLine();
Console.WriteLine("Enter last name");
p.LastName = Console.ReadLine();
Console.WriteLine("Enter date of birth in yyyy/mm/dd/ format");
p.Dob = Convert.ToDateTime(Console.ReadLine());
p.DisplayDetails();
}
}
您有一个 Adult 属性,并且在 属性 中您手动定义了一个 getter 和 setter,但它们都使用完全相同的 属性 而不是像在其他属性中那样使用字段。
请注意,您的其他属性中使用的字段名称为小写,而属性以大写字母开头(这意味着它们是独立的实体)。
所以你确实这样声明了 adult 但注释掉了:
//private string adult;
所以你需要先取消注释,然后在你的 getter & setter.
中使用它
public string Adult
{
get
{
return adult;
}
set
{
if (GetAge(dob) >= 18)
{
adult = "Adult";
}
else
{
adult = "Child";
}
}
}
但这也没有意义,因为您的 setter 没有使用您传递给它的值!因此,虽然这可能有效,但它并不是最好的方法。如果每次都是成人或儿童,只需使用 Getter 到 return。
public string Adult
{
get
{
if (GetAge(dob) >= 18)
return "Adult";
else
return "Child";
}
}
(您还应该包括处理 dob 值无效的情况(例如默认值)
顺便说一句:最好使用枚举而不是字符串,或者只使用布尔值来指示它是成人 (true) 还是儿童 (false)。
该代码用于获取用户的输入,例如他们的姓名和出生日期以及 return 姓名和年龄以及他们是否 child 等详细信息
除了 Adult 属性 其余代码工作正常
using System;
using System.IO;
public class Person
{
//Fill code here
private string firstName;
private string lastName;
private DateTime dob;
//private string adult;
public string FirstName
{
set { firstName = value; }
get { return firstName; }
}
public string LastName
{
set { lastName = value; }
get { return lastName; }
}
public DateTime Dob
{
set { dob = value; }
get { return dob; }
}
}
在下面 属性 它必须检查年龄和 return 如果年龄大于或等于 18 岁则为“成人”,否则为“Child”。
根据问题,我无法为此声明该字段。
public string Adult
{
get
{
return Adult;
throw (Whosebug)
}
set
{
if (GetAge(dob) >= 18)
{
Adult = "Adult";
}
else
{
Adult = "Child";
}
}
}
帮我修正上面的问题属性,让它不会抛出任何异常,以及抛出异常的原因
public void DisplayDetails()
{
Console.WriteLine("First Name: {0}", firstName);
Console.WriteLine("Last Name: {0}", lastName);
int age = GetAge(dob);
Console.WriteLine("Age: {0}",age);
Console.WriteLine(Adult);
}
public int GetAge(DateTime dob)
{
int age = 0;
age = DateTime.Now.Year - dob.Year;
return age;
}
}
public class Program
{
public static void Main(String[] args)
{
//Fill code here
Person p = new Person();
Console.WriteLine("Enter first name");
p.FirstName = Console.ReadLine();
Console.WriteLine("Enter last name");
p.LastName = Console.ReadLine();
Console.WriteLine("Enter date of birth in yyyy/mm/dd/ format");
p.Dob = Convert.ToDateTime(Console.ReadLine());
p.DisplayDetails();
}
}
您有一个 Adult 属性,并且在 属性 中您手动定义了一个 getter 和 setter,但它们都使用完全相同的 属性 而不是像在其他属性中那样使用字段。
请注意,您的其他属性中使用的字段名称为小写,而属性以大写字母开头(这意味着它们是独立的实体)。
所以你确实这样声明了 adult 但注释掉了:
//private string adult;
所以你需要先取消注释,然后在你的 getter & setter.
中使用它public string Adult
{
get
{
return adult;
}
set
{
if (GetAge(dob) >= 18)
{
adult = "Adult";
}
else
{
adult = "Child";
}
}
}
但这也没有意义,因为您的 setter 没有使用您传递给它的值!因此,虽然这可能有效,但它并不是最好的方法。如果每次都是成人或儿童,只需使用 Getter 到 return。
public string Adult
{
get
{
if (GetAge(dob) >= 18)
return "Adult";
else
return "Child";
}
}
(您还应该包括处理 dob 值无效的情况(例如默认值)
顺便说一句:最好使用枚举而不是字符串,或者只使用布尔值来指示它是成人 (true) 还是儿童 (false)。