今天按着書上的例子寫呀寫,寫了一下午終于做出了一個三層模式的通訊錄(當然很簡單),但是,弄了最後卻碰到個運作時的
異常,弄得我這個asp.net菜鳥郁悶了再郁悶.
異常如下:
發生類型為 System.StackOverflowException 的異常。
看了網上的資料說是,由于遞歸調用了自己.編譯能夠通過,但是運作會産生異常.
msdn上說:
關于異常的疑難解答:System.StackOverflowException
當嵌套的方法調用過多而導緻執行堆棧溢出時,将引發 StackOverflowException 異常。
相關提示
確定您沒有無限循環或無限遞歸。
過多的方法調用通常意味着存在非常深的遞歸或無限遞歸。
備注
您無法捕捉堆棧溢出異常,因為異常處理代碼可能需要堆棧。當普通應用程式中發生堆棧溢出時,公共語言運作庫 (CLR) 會
終止程序。
承載 CLR 的應用程式可以更改預設行為并指定 CLR 解除安裝發生異常的應用程式域,但允許程序繼續進行。有關更多資訊,請
參見 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;}
}
就行了....學習今天到此為止..休息!!!