问题标签 [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.

0 投票
6 回答
25537 浏览

c# - 什么是只读集合?

我运行了一个安全代码分析师,我发现自己有一个CA2105 警告。我查看了年级篡改示例。我没有意识到您可以将 int[] 分配给只读 int。我认为 readonly 就像 C++ const 并使其非法。

How to Fix Violations 建议我克隆对象(我不想这样做)或“用无法更改的强类型集合替换数组”。我单击链接并查看“ArrayList”并一一添加每个元素,看起来您无法阻止添加更多内容。

那么当我有这段代码时,让它成为只读集合的​​最简单或最好的方法是什么?

0 投票
3 回答
4839 浏览

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

0 投票
1 回答
1704 浏览

c# - 列表和只读属性

列表(和列表)实例可以是只读的,参见 ReadOnly 属性;如果集合具有属性 ReadOnly 属性,方法将引发异常。

如何创建只读 List 实例?主要用途是什么?

0 投票
3 回答
7830 浏览

c# - 如何以只读方式传递字节数组?

想想下面的代码:

有没有办法在 C# 中只读传递 byte[]?抄袭不是解决办法。我不想浪费内存(因为文件可能会变得非常大)。请牢记性能!

0 投票
2 回答
139 浏览

c# - 通过 C# 中的方法强制添加到集合的模式

我有一个带有集合成员的类。我想防止外部代码直接修改这个集合,而不是使用方法(可以执行适当的验证等)。

这比我想象的要难。这是我正在使用的解决方案。你能告诉我是否有更好的方法来做这个常见的事情吗?这一切似乎有点过度设计。

0 投票
4 回答
3110 浏览

nhibernate - NHibernate 可以使用的只读集合属性

我的域类具有如下所示的集合:

这给了我可以从类中修改的只读集合(即通过使用字段_foos)。

该集合映射如下(Fluent NHibernate):

现在,当我尝试使用这个集合时,我得到:

无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag 1[Foo]' to type 'System.Collections.Generic.List1[Foo]”的对象。

根据Unable to cast object of type NHibernate.Collection.Generic.PersistentGenericBag to List,这是因为集合需要作为接口暴露给 NHibernate,以便 NHibernate 可以注入它自己的集合类之一。

文章建议改用 IList,但遗憾的是,这个接口不包含 AsReadOnly() 方法,打乱了我只向外界公开只读集合的​​计划。

谁能建议我可以使用什么界面,满足相同要求的不同方法,或者不涉及这么多挫折的替代职业?

谢谢

大卫

0 投票
2 回答
816 浏览

c# - C#、SynchronizedReadOnlyCollection 及其构造函数

.net 类 SynchronizedReadOnlyCollection 有 4 个构造函数。

无参构造函数和只有锁对象的构造函数有什么用?如果创建集合时不填充集合,集合将始终为空?我错过了什么吗?

0 投票
1 回答
2647 浏览

nhibernate - NHibernate:使用 IEnumerable 作为集合类型会导致错误

我有一个使用 ISet 作为集合类型的类,如下所示:

我不希望集合本身能够在外部进行修改。但是,如果我将属性的类型更改为 IEnumerable,如下所示:

然后,每当我尝试使用此类时,我都会收到 NHibernate 错误:

System.InvalidCastException:无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag 1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet1 [Kctc.BusinessLayer.ProbateAssist.Entities.Contact]”的对象。

是什么赋予了?如何使该集合的公共版本为只读?

注意我也尝试使用 ReadOnlyCollection,并得到同样的错误。

0 投票
2 回答
2783 浏览

c# - ReadOnlyCollection 如何隐藏 Add 和 Remove 方法

ReadOnlyCollection<T>实现了ICollection<T>具有 Add 和 Remove 等方法的接口。我知道如何使用属性从 Intellisense 隐藏方法,但是如果我尝试使用这些方法,怎么可能导致实际的编译错误呢?

(顺便说一句,我知道在 ROC 上调用 Add 和 Remove 是没有意义的,这是一个关于导致继承成员的编译错误的问题,而不是关于使用正确的数据结构的问题)。

0 投票
1 回答
1571 浏览

c# - 如何列出带有只读列表的复制构造函数?

MSDN 文章并没有真正解释这一点。