- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
IList<T>
除了 SortedList<TKey, TValue>.Keys
不支持的操作外,接口(interface)还包括按索引访问属性如 Add
, Remove
, 和 Insert
.
A ReadOnlyCollection<T>
,比如List<T>.AsReadOnly
的返回值, 工具 IList<T>
因此提供索引访问但隐藏非法操作如Add
等,通过明确实现它们。此外,它只是底层列表的包装器;所以它不会创建副本,因此(我认为)应该不会产生任何实际的性能损失。
知道为什么 SortedList<TKey, TValue.Keys
不是 ReadOnlyCollection<TKey>
? (就此而言,为什么 Values
属性不是 ReadOnlyColllection<TValue>
?)
最佳答案
这很晦涩,但我认为这是一种优化。它与泛型的实现方式有关。通用类方法的机器代码由 JIT 编译器在运行时创建。它需要制作它的几个具体版本。任何引用类型都有一个。程序中使用的每个值类型参数都对应一个。
这可能效率低下,可能需要生成大量代码。对于通用框架类尤其不利,它们是 Ngen-ed 的。具体的方法实现必须是JIT编译的,不能在Ngen镜像中。
为了解决这个问题,框架中有私有(private)代码(抱歉,我忘了在哪里),它实例化了一大堆不同版本的通用类。有趣的无所事事的代码,让我困惑了好一阵子。但副作用是 Ngen.exe 会为泛型类方法生成代码。如果您现在在自己的代码中使用这样一个泛型类,您将从 Ngen 镜像中获得该方法的具体实现,不需要 JIT 编译器。
您可以看到它的导向,System.Collections.ObjectModel.ReadOnlyCollection 可能被认为太晦涩而无法包含在此列表中。易于验证,您会发现,当您单步执行其中一个方法时,您将不会执行源代码,即使您获得了引用源 .pdbs。
我不是 100% 确定这是准确的解释。但是鞋子合脚。
关于.net - 为什么 SortedList(TKey,TValue).Keys 属性是 IList(TKey) 而不是 ReadOnlyCollection(TKey)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2373065/
我不知道这是否可行,但基本上,我想公开一个 ReadOnlyCollection> 类型的属性,同时仍然能够在公开属性的类中修改基础集合。此外,我希望我的类的用户能够持有对返回集合的引用,以便它在我在
ReadOnlyCollection只支持读操作。为什么 T未标有 out关键字? 最佳答案 ReadOnlyCollection supports only reading operations 它
我想知道是否有人能指出我正确的方向...... 我如何从 ReadOnlyCollection 转换至 ReadOnlyCollection没有迭代或“更新”副本? 我正在使用 .NET Framew
这个问题在这里已经有了答案: Do not nest generic types in member signatures (1 个回答) 关闭 6 年前。 我正在修改我的所有代码以符合 FxCop
我有一个包含集合( Collection myItems )的类。我希望能够私下修改此 Collection 并通过公共(public)属性将其作为只读返回(如果可能,在 O(1) 中)。我正在考虑使
有这个代码... var b = new ReadOnlyCollection(new[] { 2, 4, 2, 2 }); b[2] = 3; 我在第二行收到编译错误。我预计会出现运行时错误,因为
我正在尝试使用 ReadOnlyCollection 使对象不可变,我希望对象的属性不可变。 public ReadOnlyCollection MyReadOnlyList { get
ReadOnlyCollection 构造函数要求您为它提供 IList。但是如果您有一些 ROC,您想要连接并生成一个新的 ROC,则 Concat 方法返回 IEnumerable。这不是传递给
在我的域对象中,我将 1:M 关系映射到 IList 属性。 为了更好的隔离,我这样设置为只读: private IList _property; public ReadOnlyCollection
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
MSDN含糊地提到: A ReadOnlyCollection)>) can support multiple readers concurrently, as long as the collect
假设一个方法看起来像这样。 Class MyClass public string ConcatenateList(ReadOnlyCollection aList) { var result =
我有一个具有 ReadOnlyCollection 的重线程应用程序,如下所示: internal static ReadOnlyCollection DistributorBackpressure4
我正在设计一些接口(interface)来使用 ReadOnlyCollection表明这些接口(interface)的使用者只能从集合中读取。 然而,所提供的集合并不是一成不变的,并且会不时发生变化
使用下面的代码我得到一个 CA2104 (DoNotDeclareReadOnlyMutableReferenceTypes) warning public readonly ReadOnlyColl
SO 上已经有几个类似的问题,但我发现没有一个真正涉及到这个特定主题,所以这里... 我的理解是,应该始终尝试通过具体类返回接口(interface)。不会深入探讨其背后的原因,已经有很多关于它的事情
此代码之所以有效,是因为 Enumerator无法修改集合: var roList = new List() { "One", "Two", "Three" }; IEnumerable objEnu
我使用 EntityFramewotk 和代码优先方法。所以,我这样描述我的模型: class Person { public long Id { get;set; } public
我有以下属性: private static Collection _loadedAssemblies = new Collection(); internal static ReadOnly
看来我做不到: private int[,] _table = new int[9, 9]; private ReadOnlyCollection _tableReadOnly = new ReadO
我是一名优秀的程序员,十分优秀!