问题标签 [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 投票
7 回答
1194 浏览

.net - ReadOnlyCollection 不是只读的。如何创建真正的 ReadOnlyCollection?

我知道 readonly 集合可以防止从列表中添加/删除,但它为什么不阻止设置集合中对象的属性。

出于此问题的目的,假设 _PhoneNumbers 是一个 List 并且它包含至少一个 PersonPhoneNumber 类的实例。

如何公开对象集合并使对象只读?此问题的根源在于必须在 WCF 数据合同中公开私有集合,但我不希望该集合可访问。

我想使用:

代替:

0 投票
1 回答
987 浏览

c# - 是否可以使用反射修改 ReadOnlyCollection

我正在处理一个 SDK,它保留对它创建的每个对象的引用,只要主连接对象在范围内。定期创建新的连接对象会导致其他资源问题,这不是一种选择。

为了做我需要做的事情,我必须遍历数千个这样的对象(将近 100,000 个),虽然我当然不会保留对这些对象的引用,但我正在使用的 SDK 中的对象模型会这样做。这会咀嚼内存并且危险地接近导致 OutOfMemoryExceptions。

这些对象存储在嵌套的 ReadOnlyCollections 中,所以我现在正在尝试使用反射将其中一些集合设置为空,当我完成它们时,垃圾收集器可以收集使用的内存。

当我检查 numBinaries[0] 中的类成员的值时,它返回 null,这似乎完成了任务,但是当我运行此代码时,内存消耗只会不断上升,就像我不运行时一样快将类设置为 null 。

我想弄清楚的是这种方法是否存在本质上的缺陷,或者是否有另一个对象保留对我缺少的类 ReadOnlyCollection 的引用。

0 投票
3 回答
1550 浏览

c# - FxCop:CA1033 - Microsoft 的 ReadOnlyCollection 实现违反了这一点?

如果您查看只读集合的​​代码,它没有“添加”方法,而是定义了该ICollection<T>.Add(T Value)方法(显式接口实现)。

当我对我的 ReadOnlyDictionary 类做了类似的事情时,FxCop 10 抱怨说我破坏了CA1033

只读集合类:

那么,这是误报吗?微软的基础代码不好吗?是什么赋予了?

0 投票
2 回答
2871 浏览

c# - MVVM - 我应该公开 ReadOnlyObservableCollection、ReadOnlyCollection、ICollection 等吗?

基本上,我一直认为您应该尽可能返回公开的基本类型,并担心内部的实现细节,这是有道理的......

但是,我不确定在这里做什么。基本上,现在我有:

我想知道是否应该将其作为 aReadOnlyCollection<Foo>或 an返回,ICollection<Foo>因为在内部我从未真正使用任何可观察的部分或尝试写入集合。WPF 似乎不在乎我返回什么,它仍然绑定它并正确触发集合更改通知事件。但是,我在某处读到我应该设计它以真正让任何消费视图处理我的 ViewModel。

所以我在这里有点崩溃。我认为将其保留为ReadOnlyObservableCollection<T>最有意义的是明确告诉消费视图他们可以对属性做什么和不能做什么,但我也觉得你应该在你的时候将类型减少到它们的基本类型能够。所以我不确定在这里做什么。尤其是 WPF 不关心我返回什么类型的事实,它发现它是可观察的。

0 投票
1 回答
2423 浏览

hibernate - Hibernate 只读集合映射

我从这个Hibernate Mapping Cheat Sheet中获取以下多对多映射示例:

一个 Foo 有几个bars,一个 Bar 有几个foos。因为 Bar.foos 被声明为readonly,我想我只需要这个简单的方法:

不是

我的猜测是我无法以这种方式确保一致性(将 加回FooBar。Hibernate 是否通过Bar.foos在我添加时自动更新来保证这种一致性Foo.bars,或者Bar.foos一旦初始化,集合是否是静态的?

例如,如果我这样做:

的返回值size()会是我期望的吗?

我还找不到相关的文档,所以一个指针会很有帮助。

0 投票
5 回答
11526 浏览

c# - 从 IList<> 返回 ReadOnlyCollection

好的,所以 List<> 包含为您提供 ReadOnlyCollection 的 AsReadOnly()。我需要的是有一个 IList 类型的字段,以及一个会为此列表返回 ReadOnlyCollection 的属性。

示例类:

场景如下:当项目添加到列表中时,我需要在我的类中有一些自定义逻辑,并且我想通过调用 AddToList(someitem) 来限制添加到此列表,同时不允许使用 list.Add(一些项目)。问题是我使用NHibernate需要IList 接口,所以我不能在 IList 上转换/调用 AsReadOnly() (它不包含此方法)。

你会推荐什么方法来解决这种情况?我只需要一种方法让 NHibernate 以某种方式设置所需的集合,但我还需要限制用户。

0 投票
1 回答
603 浏览

c# - protobuf-net:无法反序列化 ReadOnlyCollection

我正在尝试ReadOnlyCollection使用 protobuf-net 序列化和反序列化。但是,当 protobuf-net 尝试将 List 转换为 ReadOnlyCollection 时,反序列化会引发异常。

有没有办法将其保持为 aReadOnlyCollection而不是序列化/反序列化为List?在实际应用中,ReadOnlyCollection是我想要序列化的不可变对象的一部分,并且希望将其保留为ReadOnlyCollection.

0 投票
1 回答
197 浏览

c# - 仅在 c# 中使用 getter 和 List 时出现问题

我正在开发一个使用列表来处理用户先前猜测的应用程序。下面是(私有)列表和访问列表的属性。

为了防止隐私泄露,我使用了 ReadOnlyCollection,这也是我在属性中只有一个 getter 的原因(元素在类中直接添加到列表中,而不是通过属性添加)。

现在来解决问题。下面的代码生成错误消息:

  1. TheNameOfTheClass.PreviousGuesses.get 必须声明一个主体,因为它没有标记为抽象或外部。自动实现的属性必须同时定义 get 和 set 访问器。
  2. 无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.ObjectModel.ReadOnlyCollection”。

如何解决?提前致谢!

编辑:好的,所以问题 nr 2 解决了(感谢 Zortkun!)。第一个问题怎么样,我不能只使用吸气剂,有什么想法吗?

0 投票
1 回答
768 浏览

c# - ReadOnlyCollection 和有什么区别和 ReadOnlyCollectionBuilder在.Net 中?

今天我遇到了一个难题,.NetReadOnlyCollection<T>和in有什么区别?ReadOnlyCollectionBuilder<T>

ReadOnlyCollection<T>对象中,我们不能添加和删除项目。

ReadOnlyCollectionBuilder<T>对象中,我们可以添加和删除项目。

如果我们可以在对象中添加和删除项目ReadOnlyCollectionBuilder<T>,那么为什么名称为只读?

0 投票
2 回答
6184 浏览

c# - 实体框架只读集合

考虑一个域,其中客户、公司、员工等具有 ContactInfo 属性,该属性又包含一组地址、电话、电子邮件等……

这是我的缩写联系信息:

一些注意事项(我不确定这些是否是 EF“最佳实践”):

  • 地址集合是虚拟的以允许延迟加载
  • 收藏品的私人二传手禁止收藏品更换
  • 收集是ISet为了确保每个联系人没有重复的地址
  • 使用AddAddress方法我可以确保始终且最多有 1 个地址是主要的....

我想(如果可能的话)防止通过ContactInfo.Addresses.Add()方法添加地址并强制使用ContactInfo.AddAddress(Address address)...

我正在考虑通过公开地址集,ReadOnlyCollection但这是否适用于实体框架(v5)?

我该怎么办?