是否可以在不創建列表副本的情況下創建ReadOnlyCollection?由於元素可以被轉換爲它的基類,所以ReadOnlyCollection不應該返回具體類型,而是返回實現的接口。從例如創建ReadOnlyCollection <IDisposable>。列表<FileStream>
編輯1調整代碼表明我需要返回IList以保持API兼容性。
public class Program : IDisposable
{
List<Program> Programs = new List<Program>();
public IList<IDisposable> Getter
{
get
{
var readOnly = new ReadOnlyCollection<IDisposable>(Programs);
return readOnly;
}
}
static void Main(string[] args)
{
}
public void Dispose()
{
}
}
這將不會編譯的原因很明顯,但沒有例如
ReadOnlyCollectionCast<Program,IDisposable>
哪個會投射到吸氣劑中的IDisposable?
有點更多的歷史,我到了那裏。我確實重構了一個班級,它確實擁有List<IDisposable>
作爲班級成員。我需要更好地序列化數據容器中的具體類型。將私人字段從List<IDisposable>
更改爲List<Program>
是沒有問題的,但公共屬性應保持不變,並且仍將返回IList<IDisposable>
作爲只讀列表。
新的ReadOnlyCollection(Programs.Cast ());不會編譯,因爲它期望IList 而不是IEnumerable 。因爲IEnumerable已經是不可變的,所以具有某種意義。 –