如何返回空的只读集合
本文关键字:只读 集合 返回 何返回 | 更新日期: 2023-09-27 18:31:49
在我的域对象中,我正在将 1:M 关系映射到 IList 属性。
为了获得良好的隔离,我以这种方式将其设置为只读:
private IList<PName> _property;
public ReadOnlyCollection<PName> Property
{
get
{
if (_property!= null)
{
return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}
}
}
我不太喜欢 ReadOnlyCollection,但没有发现使集合只读的界面解决方案。
现在我想编辑属性声明,使其返回空列表,而不是在空时返回null
,所以我以这种方式编辑了它:
if (_property!= null)
{
return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}
else
{
return new ReadOnlyCollection<PName>(new List<PName>());
}
但是当我在测试中得到它时,Property
总是为空。
由于它是只读和空的,因此将其存储在静态中是安全的:
private static readonly ReadOnlyCollection<PName> EmptyPNames = new List<PName>().AsReadOnly();
然后在您需要的任何地方重复使用它,例如:
if (_property!= null)
{
return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}
else
{
return EmptyPNames;
}
如果将
默认值设置为 IList 会怎样
private IList<PName> _property = new IList<PName>();
public ReadOnlyCollection<PName> Property
{
get
{
return _property
}
}
也许你可以使用 IEnumerable 而不是 ReadOnlyCollection :
private IList<PName> _property = new List<PName>();
public IEnumerable<PName> Property
{
get
{
return _property;
}
}
其他可能的解决方案是通过以下方式编辑类构造函数:
public MyObject (IList<PName> property)
{
this._property = property ?? new List<PName>();
}