我有一个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属性陷入了一个大循环。如果我没有将Creator设置为新用户,为什么会发生这种情况?有没有办法阻止这件事的发生?
发布于 2010-11-17 16:24:41
我的猜测是,你正在以某种方式初始化创建者,这会导致创建无限数量的用户,从而导致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.}
实际上,我不知道如何修复它,因为它太难猜测他的所有代码,哈哈。
发布于 2010-11-17 16:10:39
我敢打赌你的UserName
设置器是这样的
public string UserName
{
get { return UserName; }
set { UserName = value; }
}
这导致了无限递归。您需要像您拥有的Creator
属性那样设计它,或者这样做
private string _UserName;
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
编辑:
我怀疑Creator
属性与这个问题有任何关系,因为该值在构造函数中只会是null
发布于 2010-11-17 16:22:58
我有一个用户,创建者就是它自己。我猜这是一个数据问题,而不是代码问题。不管怎样,谢谢你看这篇文章。
https://stackoverflow.com/questions/4206368
复制相似问题