天天看點

System.StackOverflowException

今天按着書上的例子寫呀寫,寫了一下午終于做出了一個三層模式的通訊錄(當然很簡單),但是,弄了最後卻碰到個運作時的

異常,弄得我這個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;}

  }

就行了....學習今天到此為止..休息!!!

繼續閱讀