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;}
  }
就行了....學習今天到此為止..休息!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM