Tag: keyedcollection

如何让KeyedCollection成为只读?

首先让我解释为什么我使用KeyedCollection。 我正在构建一个DLL,我有一个项目列表,我需要添加到一个集合,并让它们按照我放置它们的顺序保留,但我还需要通过它们的索引和键来访问它们(关键是我已定义的对象的属性)。 如果有任何其他更简单的集合,请告诉我。 好了,我需要能够在DLL内部向此集合中添加项目,但是我需要将它作为只读公开提供给DLL的最终用户,因为我不希望它们删除/更改我添加的项目。 我一直在这个网站,其他网站,谷歌搜索,我一直无法找到一种方法来获得某种只读的KeyedCollection。 我最接近的是这个页面( http://www.koders.com/csharp/fid27249B31BFB645825BD9E0AFEA6A2CCDDAF5A382.aspx?s=keyedcollection#L28 ),但我无法让它发挥作用。 更新: 我看了看那些C5课程。 这与你的其他评论一起帮助我更好地理解如何创建我自己的只读类,它似乎工作。 但是,当我尝试将常规版本转换为只读版本时,我遇到了问题。 我得到一个编译时无法转换错误。 这是我创建的代码(第一个小类是我最初的代码): public class FieldCollection : KeyedCollection { protected override string GetKeyForItem(Field field) { return field.Name; } } public class ReadOnlyFieldCollection : KeyedCollection { protected override string GetKeyForItem(Field field) { return field.Name; } new public void Add(Field field) { throw new ReadOnlyCollectionException(“This collection […]