我在寫一個接口,它有一個我只想讀取的集合屬性。我不希望界面的用戶能夠修改集合。我發現創建一個只讀集合屬性的典型建議是屬性的類型設置爲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