首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >visual studio 2015调试退出代码0x800703e9

visual studio 2015调试退出代码0x800703e9
EN

Stack Overflow用户
提问于 2017-02-20 07:48:34
回答 1查看 4.6K关注 0票数 0

我正在创建一个C#电话簿应用程序,它接受用户的输入(名、姓和电话号码),将其存储在文本文件中,并可以在Windows上显示。目前,当我启动程序时,我在以下方法中得到一个StackOverflowException:

代码语言:javascript
复制
public string Phone
    {
        get { return Phone; }
        set
        {    // VS says that StackOverflowException happens here

            if (value.Length == 10)
            {
                Phone = value;
            }

            else
            {
                Phone = "0000000000";
            }
        }
    }

我相信,当我试图从文本文件中读取电话号码时,会出现异常情况。以下代码来自Read方法:

代码语言:javascript
复制
                foreach (var line in lines)
                {
                    string[] entries = line.Split('`');

                    Contact newContact = new Contact();

                    newContact.FirstName = entries[0];
                    newContact.LastName = entries[1];
                    newContact.Phone = entries[2];  //I think exception happens here

                    contactList.Add(newContact);

但是,当我在该行放置一个断点并进入调试模式时,当我在行Phone上悬停在Phone = value;上时,VS将在大约6秒后退出调试模式。这是在我悬停Phone和VS退出调试模式后的输出:

'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll',‘(托管(v4.0.30319)):加载的ContactsList.vshost.exe跳过加载符号。对模块进行了优化,并启用了调试器选项“只是我的代码”。程序'5200 ContactsList.vshost.exe: Managed (v4.0.30319)‘已经退出代码-2147023895 (0x800703e9)。

我尝试过许多解决方案(重新启动VS、清理和重建解决方案、启用/禁用不同的设置),但在我的一生中,我无法解决这个问题。试着查找退出代码0x800703e9,现在仍然知道它是什么,我只知道它与StackOverflowException有关。有解决这个问题的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-20 07:51:07

每当您将值赋值给属性Phone时,它的setter就会被触发,在setter中,您再次将值分配给相同的变量,因此它再次触发相同的值,并且进程将继续。因此,您的代码将产生无限赋值,使用备份私有属性,如下所示:

代码语言:javascript
复制
private string _Phone; 
public string Phone
{
    get { return _Phone; }
    set
    {    // VS says that StackOverflowException happens here

        if (value.Length == 10)
        {
            _Phone = value;
        }

        else
        {
            _Phone = "0000000000";
        }
    }
}

现在您可以安全地避免这种递归赋值,因为您在这里使用的是备份属性,所以在分配值时,您要将它们存储在_Phone中,并通过get_Phone检索值。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42339061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档