您好,我正在编写的这个程序使用下面的结构。我一直收到stackoverflow错误,异常是在公共字符串sessionID set ...(其中“>>>”是)的第一个括号中停止程序。
public struct SessionStruct
{
public string sessionID
{
get
{
return sessionID;
}
set
>>> {
sessionID = value;
}
}
public DateTime time
{
get
{
return time;
}
set
{
time = value;
}
}
public string type
{
get
{
return type;
}
set
{
type = value;
}
}
};
以下是设置结构的代码:
if (type == "11" || type == "9")
{
s.sessionID = attributeArray[0].ToString();
s.time = DateTime.Now;
if (type == "9")
s.type = attributeArray[4].ToString();
}
else
{
s.sessionID = null;
s.time = DateTime.Now;
s.type = null;
}
先谢谢你的帮助......
答案 0 :(得分:7)
你正在那个setter中进行无限递归。想一想。 创建一个不同名称的私有成员来获取/设置。
private string sessionID;
public string SessionID
{
get
{
return sessionID;
}
set
{
sessionID = value;
}
}
答案 1 :(得分:5)
sessionId属性setter将其调用为self,从而导致永久递归。
答案 2 :(得分:4)
你的财产一遍又一遍地呼唤着自己。该属性确实需要一个后备存储来存储数据,这通常是一个私有变量:
private string _sessionID;
public string sessionID
{
get
{
return _sessionID;
}
set
{
_sessionID = value;
}
}
或者让编译器为你做:
public string sessionID
{
// compiler will create a backing store for you
get; set;
}
答案 3 :(得分:3)
这是因为set属性调用自身(名称相同)。
您可能想要使用autoproperty
public string sessionID
{
get; set;
}
答案 4 :(得分:1)
问题是您正在递归sessionID
属性。
此:
public string sessionID
{
get
{
return sessionID;
}
set
{
sessionID = value;
}
}
将编译成这样的东西:
public string sessionID_get() { return sessionID_get(); }
public void sessionID_set(string value) { sessionID_set(value); }
显然这不起作用!
您应该使用支持字段:
private string _sessionID;
public string sessionID
{
get
{
return _sessionID;
}
set
{
_sessionID = value;
}
}
或者,您可以让编译器自动为您生成一个:
public string sessionID
{
get; set;
}
答案 5 :(得分:1)
答案 6 :(得分:0)
如果你自己实现getter和setter,你必须使用一个支持字段,否则它将继续在setter上调用自己,就像这样:
private string _sessionId;
public string sessionID
{
get
{
return _sessionID;
}
set
{
_sessionID = value;
}
}
由于您实际上并不需要实现,因为您没有放入任何自定义逻辑,请使用自动属性:
public string sessionID {get;set;}
答案 7 :(得分:0)
您在set访问器中将sessionId分配给自己。 (递归的)
您需要将您正在分配的字段拆分为自己的支持字段,或者使用自动属性。
像这样:
private string _sessionId;
public string sessionID
{
get
{
return _sessionId;
}
set
{
_sessionId= value;
}
}
或自动属性:
public string sessionId { get;set ;}
另请注意:当您访问set访问器时,您的其他属性会遇到同样的问题。