2017-09-17 28 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? –

相關問題