首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >属性导致Stackoverflow异常

属性导致Stackoverflow异常
EN

Stack Overflow用户
提问于 2010-11-18 00:02:10
回答 3查看 3.6K关注 0票数 0

我有一个User类,它有一个名为Creator的属性,其类型为User (创建此用户的用户)

代码语言:javascript
复制
public class User {

    public User()
    {
        UserName = "";
        EmailAddress = "";
    }

    public String UserName { get; set; }
    public String EmailAddress { get; set; }
    //bunch of other properties

    public User Creator { get; set; }
}

我在行UserName = "";上得到一个Stackoverflow异常。我假设这是因为Creator属性陷入了一个大循环。如果我没有将Creator设置为新用户,为什么会发生这种情况?有没有办法阻止这件事的发生?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-18 00:24:41

我的猜测是,你正在以某种方式初始化创建者,这会导致创建无限数量的用户,从而导致StackoverflowException。

这里有一个例子,就是这样的:

代码语言:javascript
复制
public List<User> CreatUsers()
{
    List<User> users = new List<User>;

    //Some DB call to get a list of users
    foreach (var record in userlist)
        List.Add(CreatUser(record));
}

public User CreateUser(?? record)
{
    User user = new User();
    //Set properties
    if (record has creator) //pseudo-code
        user.Creator = CreatUser(record.Creator); //guessing as to record.Creator
}

public class User
{
    public User()
    {
        UserName = "";          //Stackoverflow on this line.
        EmailAddress = "";
    }

    public String UserName { get; set; }
    public String EmailAddress { get; set; }

    public User Creator { get; set; }
}
//{Cannot evaluate expression because the current thread is in a stack overflow state.}

实际上,我不知道如何修复它,因为它太难猜测他的所有代码,哈哈。

票数 2
EN

Stack Overflow用户

发布于 2010-11-18 00:10:39

我敢打赌你的UserName设置器是这样的

代码语言:javascript
复制
public string UserName
{
    get { return UserName; }
    set { UserName = value; }
}

这导致了无限递归。您需要像您拥有的Creator属性那样设计它,或者这样做

代码语言:javascript
复制
private string _UserName;
public string UserName
{
    get { return _UserName; }
    set { _UserName = value; }
}

编辑:

我怀疑Creator属性与这个问题有任何关系,因为该值在构造函数中只会是null

票数 3
EN

Stack Overflow用户

发布于 2010-11-18 00:22:58

我有一个用户,创建者就是它自己。我猜这是一个数据问题,而不是代码问题。不管怎样,谢谢你看这篇文章。

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

https://stackoverflow.com/questions/4206368

复制
相关文章

相似问题

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