我在写一个接口,它有一个我只想读取的集合属性。我不希望界面的用户能够修改集合。我发现创建一个只读集合属性的典型建议是属性的类型设置为IEnumerable的是这样的:正在使用YIELD以只读方式返回集合?
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
return this._mylist;
}
}
然而,这并不妨碍用户从铸造了IEnumerable回到列表和修改它。
如果我使用Yield
关键字而不是直接返回_mylist
,这将阻止我的界面的用户能够修改集合。我认为是这样,因为我只是一个接一个地返回对象,而不是实际的集合。
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
foreach(string str in this._mylist)
{
yield return str;
}
}
}
在这里,延期执行只不过是开销。 – SLaks 2010-05-03 23:27:00
有时我*强制*评估只是为了避免延误的副作用(ick !!!) – 2010-05-03 23:28:59