【发布时间】:2017-03-17 07:12:13
【问题描述】:
是否可以在不创建列表副本的情况下创建 ReadOnlyCollection?由于可以将元素转换为其基类,因此 ReadOnlyCollection 返回的不是具体类型而是实现的接口应该是安全的。
Edit1 改编代码以显示我需要返回 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>
哪个会在 getter 中转换为 IDisposable?
我是如何到达那里的更多历史。我确实重构了一个类,确实有 List<IDisposable> 作为类成员。我需要对数据容器中的具体类型进行更好的序列化。将私有字段从 List<IDisposable> 更改为 List<Program> 没有问题,但公共属性应保持不变,并且仍将 IList<IDisposable> 作为只读列表返回。
【问题讨论】: