System.StackOverflowException的一個例子(轉)

今天按着書上的例子寫呀寫,寫了一下午終於作出了一個三層模式的通信錄(固然很簡單),可是,弄了最後卻碰到個運行時的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;}  }就好了....學習今天到此爲止..休息!!!

相關文章
相關標籤/搜索