今天按着書上的例子寫呀寫,寫了一下午終於作出了一個三層模式的通信錄(固然很簡單),可是,弄了最後卻碰到個運行時的asp.net
異常,弄得我這個asp.net菜鳥鬱悶了再鬱悶.
異常以下:
發生類型爲 System.StackOverflowException 的異常。
看了網上的資料說是,因爲遞歸調用了本身.編譯可以經過,可是運行會產生異常.
msdn上說:函數
關於異常的疑難解答:System.StackOverflowException學習
當嵌套的方法調用過多而致使執行堆棧溢出時,將引起 StackOverflowException 異常。spa
相關提示.net
確保您沒有無限循環或無限遞歸。
過多的方法調用一般意味着存在很是深的遞歸或無限遞歸。調試
備註遞歸
您沒法捕捉堆棧溢出異常,由於異常處理代碼可能須要堆棧。當普通應用程序中發生堆棧溢出時,公共語言運行庫 (CLR) 會進程
終止進程。get
承載 CLR 的應用程序能夠更改默認行爲並指定 CLR 卸載發生異常的應用程序域,但容許進程繼續進行。有關更多信息,請string
參見 ICLRPolicyManager 和承載公共語言運行庫。
我找啊找,找了很久......最後,一段代碼一段代碼的去執行,再補充點輔助調試的代碼....
終於,發現了我這個類中當要獲得CAddress這個值時就會引起異常.
using System;
namespace FSDataAccess
{
/// <summary>
/// ContactEntry 聯繫人實體
/// </summary>
public class ContactEntry
{
private int cID;//聯繫人編號
private string cName;//姓名
private string cAddress;//地址
private string cPhone;//電話
private string cEmail;//電子郵件
public ContactEntry()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
/// <summary>
/// 聯繫人編號
/// </summary>
public int CID
{
get{return cID;}
set{cID=value;}
}
/// <summary>
/// 姓名
/// </summary>
public string CName
{
get{return cName;}
set{cName=value;}
}
/// <summary>
/// 地址
/// </summary>
public string CAddress
{
get{return CAddress;}
set{cAddress=value;}
}
/// <summary>
/// 電話
/// </summary>
public string CPhone
{
get{return cPhone;}
set{cPhone=value;}
}
/// <summary>
/// 電子郵件
/// </summary>
public string CEmail
{
get{return cEmail;}
set{cEmail=value;}
}
}
}
不知道您在看了上面的public string CAddress{}以後有沒有發現錯誤.這裏我把return CAddress;中的CAddress首字母大寫
了,應該是private成員cAddress,鬱悶啊...想來,這裏產生System.StackOverflowException 異常就不足爲怪了(遞歸調用自
己)...把public string CAddress{}改爲 public string CAddress { get{return cAddress;} set{cAddress=value;} }就好了....學習今天到此爲止..休息!!!