【问题标题】:C# code -2147023895 (0x800703e9) while debugging调试时的 C# 代码 -2147023895 (0x800703e9)
【发布时间】:2017-06-04 07:21:34
【问题描述】:

我正在尝试调试由我创建的类的对象组成的列表中的一些信息。当我尝试检查它时,它会停止调试并在输出窗口中给出以下代码:

程序 'MyApp.vshost.exe' 已退出,代码为 -2147023895 (0x800703e9)。

当我搜索号码时,我发现了这个:

递归太深;堆栈溢出。

当我读到这篇文章时,我觉得我有一个无限循环或类似的东西。

当我搜索此内容时,我访问了 MSDN,并显示联系供应商。那就是我……

我在 stackoverflow 上找到的另一个主题是这个:Runtime exception, recursion too deep

但这是关于循环……很长一段时间。

我的只是一个列表,其中保存了一些信息。

这是课

class LinePiece
{
    private string type;
    private string elementNumber;
    private int beginX, beginY;
    private int endX, endY;
    private int diameter;
    private string text;

    public string Type { get { return type; } }
    public string ElementNumber { get { return ElementNumber; } }
    public int BeginX { get { return beginX; } }
    public int BeginY { get { return beginY; } }
    public int EndX { get { return endX; } }
    public int EndY { get { return endY; } }

    public LinePiece(string a_type, string a_eleNr, int a_beginX, int a_beginY, int a_endX, int a_endY)
    {
        type = a_type;
        elementNumber = a_eleNr;
        beginX = a_beginX;
        beginY = a_beginY;
        endX = a_endX;
        endY = a_endY;
    }
}

我创建了一个这样的列表:List<LinePiece> l_linePieces = new List<LinePiece>();

并添加这样的一行:

LinePiece LP = new LinePiece(s_lpType, s_EleNr, i_X1, i_Y1, i_X2, i_Y2);
l_linePieces.Add(LP);

此时调试时,我单击l_linePieces,它会显示其中的对象数量。但是当我尝试打开其中一个时,它会停止并给出错误。

此外,当我不调试它时,一切都很好,它没有给出错误等。但我想检查这个列表中的一些值。

那么我该如何解决这个问题呢?

【问题讨论】:

  • 说得很好。让我笑了谢谢。 “联系供应商。那是我……”

标签: c# debugging


【解决方案1】:

这个属性获取器...

public string ElementNumber { get { return ElementNumber; } }

...调用自己。

为避免以后出现这种情况,您可能应该使用自动属性,如下所示:

public string ElementNumber { get; set; }

编译器会发明一个隐藏的支持字段。

您可以按如下方式在构造函数中初始化自动属性:

public LinePiece(string a_type, string a_eleNr,
                 int a_beginX, int a_beginY,
                 int a_endX, int a_endY)
{
    Type = a_type;
    ElementNumber = a_eleNr;
    BeginX = a_beginX;
    BeginY = a_beginY;
    EndX = a_endX;
    EndY = a_endY;
}

如果您只想从类本身(即在构造函数中)设置它们,请使用private set

public string ElementNumber { get; private set; }

【讨论】:

  • 对,就是这样...整天在软件上工作有时会让人筋疲力尽。您只是看不到这样的小缺陷...谢谢您的帮助
  • @Bart 这是自动属性可以为您节省一些麻烦的地方:public string ElementNumber { get; private set; };那么你根本不需要显式的私有字段(编译器会为你创建一个)。
  • private set有什么用?当我根本没有提到设置时,它也告诉你不能设置它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
相关资源
最近更新 更多