代碼:意外的StackOverflow與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);
}
}
我獲得StackOverflow
錯誤Modules private set;
試圖Modules = new ReadOnlyCollection<IModule>(_modules);
,我無法理解它的原因。我懷疑它以某種方式與接口相關聯,但無法弄清楚究竟如何。
我已經找到一個解決方案,讓我得到的行爲,我需要:
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>();
}
}
您提供的代碼不能編譯。在執行最小更改以使其編譯後,它不會失敗(我可以創建類的一個實例)。請提供[mcve]。 –
@JonSkeet我正要說...打我吧:D –