我有一个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属性陷入了一个大循环。如果我没有将创建者设置为新用户,为什么会发生这种情况?有没有办法阻止这种情况发生?
答案 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)
我有一个创建者本身的用户。我想这是一个数据问题而不是代码问题。非常感谢你看这个。