天天看点

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;}

  }

就行了....学习今天到此为止..休息!!!

继续阅读