我正在编写一个接口,它有一个我想只读的集合属性。我不希望界面的用户能够修改集合。我发现创建只读集合属性的典型建议是将属性的类型设置为 IEnumerable,如下所示:
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
return this._mylist;
}
}
然而,这并不能阻止用户将 IEnumerable 转换回 List 并对其进行修改。
如果我使用Yield
关键字而不是_mylist
直接返回,这会阻止我界面的用户修改集合。我是这么认为的,因为那时我只是一个一个地返回对象,而不是实际的集合。
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
foreach(string str in this._mylist)
{
yield return str;
}
}
}