.dll中发生了未处理的“System.StackOverflowException”类型异常

时间:2012-04-05 07:07:35

标签: c# windows

我正在用C#开发一个Windows应用程序。在我的应用程序中,我使用了一个静态类。

以下是代码:

public static class clsNumber
{
     private static object vValue;

     public static object Value
     {
         get
         {
              return Value;
         }
         set
         {
              Value = value;
         }
     }

     public static string HexValue
     {
         get
         {
              try
              {
                   return Microsoft.VisualBasic.Conversion.Hex(vValue);
              }
              catch
              {
                   return Convert.ToString(vValue);
              }
         }
         set
         {
              Value = Microsoft.VisualBasic.Conversion.Val("&H" + value);
         }
     }
}

从另一个类中设置上述类的“HexValue”的值。以下是代码行:

iStick = sOutPut.Substring(0, 8);
clsNumber.HexValue = iStick;

在执行上面的代码行时,会出现以下错误:

"An unhandled exception of type 'System.StackOverflowException' occurred in <.....>.dll"

任何人都可以帮我解决这个问题吗? 提前谢谢。

3 个答案:

答案 0 :(得分:10)

这里有一个非终止递归:

public static object Value  
{
     get
     {
          return Value;
     }
     set
     {
           Value = value;      
     }
 }

getter中的行return Value递归调用getter并导致堆栈溢出。同样适用于制定者。

我认为你的意思是:

public static object Value  
{
     get
     {
          return vValue;
     }
     set
     {
           vValue = value;      
     }
 }

我看不出在这里使用明确命名的字段返回属性可以获得什么。我将删除vValue并声明属性如下:

public static object Value { get; set; }

答案 1 :(得分:1)

2件事:

  1. 您忘记了已创建vValue字段。

  2. 不要使属性递归(除非确实需要,并且在一些迭代后可以解析)。在这里,您在Value属性中调用Value属性。

答案 2 :(得分:-2)

public static string HexValue 
上面的

行使用StringBuilder而不是string