带有 ReadOnlyCollection 的意外 StackOverflow
Unexpected StackOverflow with ReadOnlyCollection
代码:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
ReadOnlyCollection<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
Modules = new ReadOnlyCollection<IModule>(_modules);
}
}
我在尝试 Modules = new ReadOnlyCollection<IModule>(_modules);
时在 Modules private set;
中出现 Whosebug
错误,我无法理解其原因。我怀疑它以某种方式与界面相关联,但无法弄清楚具体是如何。
我找到了一个解决方案,可以让我获得所需的行为:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
IList<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public IList<IModule> Modules
{
get
{
return _modules.AsReadOnly();
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
}
}
你的问题在这里:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
您正在从自身访问 Modules
的 getter(和 setter)。这导致无休止的递归,最终导致 WhosebugException
.
你要做的是:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get;
private set;
}
这将适用于您现有的构造函数代码。
代码:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
ReadOnlyCollection<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
Modules = new ReadOnlyCollection<IModule>(_modules);
}
}
我在尝试 Modules = new ReadOnlyCollection<IModule>(_modules);
时在 Modules private set;
中出现 Whosebug
错误,我无法理解其原因。我怀疑它以某种方式与界面相关联,但无法弄清楚具体是如何。
我找到了一个解决方案,可以让我获得所需的行为:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
IList<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public IList<IModule> Modules
{
get
{
return _modules.AsReadOnly();
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
}
}
你的问题在这里:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
您正在从自身访问 Modules
的 getter(和 setter)。这导致无休止的递归,最终导致 WhosebugException
.
你要做的是:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get;
private set;
}
这将适用于您现有的构造函数代码。