由属性引起的Stackoverflow异常

时间:2010-11-17 16:02:10

标签: c# recursion properties stack-overflow

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

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属性陷入了一个大循环。如果我没有将创建者设置为新用户,为什么会发生这种情况?有没有办法阻止这种情况发生?

3 个答案:

答案 0 :(得分:3)

我会打赌你的UserName Setter看起来像这样

public string UserName
{
    get { return UserName; }
    set { UserName = value; }
}

这导致infinate递归。您需要将其设计为您拥有的Creator属性,或者执行此操作

private string _UserName;
public string UserName
{
    get { return _UserName; }
    set { _UserName = value; }
}

编辑:

我怀疑Creator属性与该问题有什么关系,因为该值在构造函数中只是null

答案 1 :(得分:2)

我的猜测是你正在以某种方式初始化Creator,导致创建无限数量的User导致StackoverflowException。

这是一个产生这样的例子:

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 :(得分:1)

我有一个创建者本身的用户。我想这是一个数据问题而不是代码问题。非常感谢你看这个。