此属性的 setter方法中抛出了堆栈溢出异常:
public string TimeZone
{
get
{
if (TimeZone == null)
return "";
return TimeZone;
}
set { TimeZone = value; }
}
“发生了'System.StackOverflowException'类型的未处理异常”
我在这里看不到任何直接的递归。
如果代码有问题,我应该使用什么来纠正它?
答案 0 :(得分:11)
set { TimeZone = value; }
setter是递归的。
您必须使用以下字段:
string _timeZone;
public string TimeZone
{
get
{
if (_timeZone== null)
return "";
return _timeZone;
}
set { _timeZone= value; }
}
答案 1 :(得分:4)
get
和set
都是通过再次调用自己来递归的。试试这个:
string timeZone;
public string TimeZone
{
get { return timeZone == null ? string.Empty : timeZone; }
set { timeZone = value; }
}
答案 2 :(得分:1)
试试这个
public string TimeZone
{
get
{
if (m_TimeZone == null)
return "";
return m_TimeZone;
}
set {m_TimeZone = value; }
}
m_TimeZone
应该与关联变量
您正在访问属性TimeZone
内的相同属性TimeZone
,您应该访问该属性并使用相关变量
答案 3 :(得分:1)
在getter中你自己访问getter,这会导致对属性getter本身的递归调用
if (TimeZone == null)
Setter也是递归的
set { TimeZone = value; }
因此,取决于调用代码getter或setter会导致堆栈溢出,因为多次调用属性(引擎盖下的get_TimeZone() / set_TimeZone()
方法)。
因此,介绍支持字段并在属性中使用它,这是一种通用技术我想知道为什么你不知道这些简单的东西。