2

我正在用 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"

谁能帮我解决这个问题?提前致谢。

4

3 回答 3

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; }
于 2012-04-05T07:10:45.840 回答
1

2件事:

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

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

于 2012-04-05T09:20:20.200 回答
-2
public static string HexValue 

在上面的行中使用 StringBuilder 而不是 string

于 2012-04-05T08:28:15.813 回答