2017-09-17 37 views
0

我正在使用VS开发C#中的数据库应用程序。我有一个叫做Crew的类,有自己的字段,例如姓名,出生日期等等。我希望用户指定一些字段,而其他字段则由应用程序本身自动计算/计算出来。如年龄从出生之日算起。这里是我正在做的:定义类的属性时出现异常

[Required] 
[DisplayName("Date of Birth")] 
public DateTime DOB 
{ 
    set { } 
    get { return DOB.Date; } 
} 
public int Age 
{ 
    get { return Convert.ToInt32(DateTime.Now.Year) - Convert.ToInt32(DOB.Year); } 
} 

调试时,我填写一个人的字段,然后点击Create按钮保存到数据库中,而引发异常说以下内容:

发生System.StackOverflowException异常 HResult = 0x800703E9消息=引发类型'System.StackOverflowException'的异常。

回答

2

在吸气器DOB,你参考DOB。那么它必须访问DOB的吸气剂,它参考DOB。因此它必须访问DOB ....

属性在尝试获取它的值时无法访问自身,或者您将进入无限循环并获取SO异常。您可以通过具有存储的值private支持字段解决这个问题,然后访问的属性的getter:

private DateTime _dob; 

public DateTime DOB 
{ 
    get { return _dob; } 
    set { _dob= value; } 
} 
+0

我得值从类的外部存储,因为财产是要通过将输入用户。 –

+0

基于OP的问题,它应该是'get {return _dob.Date; }' –

+0

@StephenMuecke,但如果它是私人的,我怎么能指定_dob? –

相关问题