问题标签 [readonly-collection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 什么是只读集合?
我运行了一个安全代码分析师,我发现自己有一个CA2105 警告。我查看了年级篡改示例。我没有意识到您可以将 int[] 分配给只读 int。我认为 readonly 就像 C++ const 并使其非法。
How to Fix Violations 建议我克隆对象(我不想这样做)或“用无法更改的强类型集合替换数组”。我单击链接并查看“ArrayList”并一一添加每个元素,看起来您无法阻止添加更多内容。
那么当我有这段代码时,让它成为只读集合的最简单或最好的方法是什么?
c#-3.0 - FxCop CA2227 警告和 ReadOnlyCollection
在我的 VS2008 SP1、.NET 3.5 SP1 项目中,我有包含不同属性的不同类。我经常使用 C#3.0 自动属性。
其中一些属性需要是集合。因为我想让它变得简单,所以我使用ReadOnlyCollection<T>
这些属性。
我不想使用IEnumerable<T>
,因为我想随机访问元素。
我使用代码分析(FxCop 规则)并收到 CA2227 警告。
我不明白为什么ReadOnlyCollection<T>
应该有一个 set 方法,而它不能被改变...... set 方法只能做属性可以做的事情。
例子:
CA2227:Microsoft.Usage:通过删除属性设置器将“MyClass.SomeNumbers”更改为只读。C:\用户...\Visual Studio 2008\Projects\CA2227\MyClass.cs 7 CA2227
c# - 列表和只读属性
列表(和列表)实例可以是只读的,参见 ReadOnly 属性;如果集合具有属性 ReadOnly 属性,方法将引发异常。
如何创建只读 List 实例?主要用途是什么?
c# - 如何以只读方式传递字节数组?
想想下面的代码:
有没有办法在 C# 中只读传递 byte[]?抄袭不是解决办法。我不想浪费内存(因为文件可能会变得非常大)。请牢记性能!
c# - 通过 C# 中的方法强制添加到集合的模式
我有一个带有集合成员的类。我想防止外部代码直接修改这个集合,而不是使用方法(可以执行适当的验证等)。
这比我想象的要难。这是我正在使用的解决方案。你能告诉我是否有更好的方法来做这个常见的事情吗?这一切似乎有点过度设计。
nhibernate - NHibernate 可以使用的只读集合属性
我的域类具有如下所示的集合:
这给了我可以从类中修改的只读集合(即通过使用字段_foos)。
该集合映射如下(Fluent NHibernate):
现在,当我尝试使用这个集合时,我得到:
无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag 1[Foo]' to type 'System.Collections.Generic.List
1[Foo]”的对象。
根据Unable to cast object of type NHibernate.Collection.Generic.PersistentGenericBag to List,这是因为集合需要作为接口暴露给 NHibernate,以便 NHibernate 可以注入它自己的集合类之一。
文章建议改用 IList,但遗憾的是,这个接口不包含 AsReadOnly() 方法,打乱了我只向外界公开只读集合的计划。
谁能建议我可以使用什么界面,满足相同要求的不同方法,或者不涉及这么多挫折的替代职业?
谢谢
大卫
c# - C#、SynchronizedReadOnlyCollection 及其构造函数
.net 类 SynchronizedReadOnlyCollection 有 4 个构造函数。
无参构造函数和只有锁对象的构造函数有什么用?如果创建集合时不填充集合,集合将始终为空?我错过了什么吗?
nhibernate - NHibernate:使用 IEnumerable 作为集合类型会导致错误
我有一个使用 ISet 作为集合类型的类,如下所示:
我不希望集合本身能够在外部进行修改。但是,如果我将属性的类型更改为 IEnumerable,如下所示:
然后,每当我尝试使用此类时,我都会收到 NHibernate 错误:
System.InvalidCastException:无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag 1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet
1 [Kctc.BusinessLayer.ProbateAssist.Entities.Contact]”的对象。
是什么赋予了?如何使该集合的公共版本为只读?
注意我也尝试使用 ReadOnlyCollection,并得到同样的错误。
c# - ReadOnlyCollection 如何隐藏 Add 和 Remove 方法
ReadOnlyCollection<T>
实现了ICollection<T>
具有 Add 和 Remove 等方法的接口。我知道如何使用属性从 Intellisense 隐藏方法,但是如果我尝试使用这些方法,怎么可能导致实际的编译错误呢?
(顺便说一句,我知道在 ROC 上调用 Add 和 Remove 是没有意义的,这是一个关于导致继承成员的编译错误的问题,而不是关于使用正确的数据结构的问题)。
c# - 如何列出带有只读列表的复制构造函数?
MSDN 文章并没有真正解释这一点。