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

typescript - 为什么我不能在 TypeScript 中以这种方式只读数组?

文档显示(#ReadOnlyArray)如何使用界面来完成,但是当我探索该语言时,我想知道为什么这不起作用?

0 投票
1 回答
177 浏览

c# - 如何防止更改 IReadOnlyList?

我需要将其IReadOnlyList<T>用作返回参数,因为它最符合我的需求,但正如您在下面的示例中所见,如果它不是真正只读的,您仍然可以修改它包装的列表。

问题:

ImmutableArray<T>看起来很棒,因为它是真正的只读的,唯一的事情是我不想/不需要公开返回允许生成副本的更改的功能齐全的类。

因此,我坚持返回IReadOnlyList<T>,因为它的意图很简单,但我需要解决可能修改的列表问题。

问题:

返回一个ImmutableArray<T>IReadOnlyList<T>正确的方法吗?

如果没有,那么你能建议如何去做吗?

0 投票
1 回答
55 浏览

c# - 列表中的只读违规在 C# 中?

与 List 结合使用时是否违反只读关键字?

例如

和打印的输出

readonly 的概念是,它的值只能在构造函数内部更改,如果它没有被初始化。所以在上面的例子中,当两个集合在运行时更改时,ReadOnlyList 和 DefaultList 之间的确切区别是什么。

而且我也发现将 ReadOnlyList 更改为 IReadOnlyCollection 没有任何区别。有人可以帮助我理解这个概念。

0 投票
1 回答
23 浏览

c# - 从现有的层次结构创建不可变的集合结构

我有一个存储分层数据的对象。我已经成功地从一个平面结构创建了我需要的结构,但这需要我使用List<>它不是一成不变的(我想使用IReadOnlyList)。

现在我无法真正理解如何基于这些子列表创建不可变列表。谁能指导我正确的方向?

该类如下所示:

如果Childrennull,那么它是一个项目,否则它是一个文件夹,包含零个或多个ItemOrFolder

0 投票
2 回答
64 浏览

javascript - JS 等价于 Java 的 Collections.unmodifiableCollection

我经常在我的 java 代码中使用这种策略,以使 Collection 只对外部世界只读,但避免大/经常克隆:

我想在我的 JS 类中遵循相同的模式。这将使我的业务逻辑代码更安全、更清晰,因为我将能够在拥有这些字段的类中控制对我的列表的每次更改(推送/拼接等)。

目前对列表使用“私有”字段,并使用 get-set 函数从外部访问它们。唯一缺少的链接是一些等效于 java 的 Collections.unmodifiableCollection。不会复制整个列表的东西(例如 slice()),并且不会影响原始字段(例如 Object.freeze())。

JS中有这样的功能吗?如果没有,有人怎么能达到类似的效果(自定义迭代?)

0 投票
2 回答
95 浏览

c# - HashSet类型如何使用ExceptWith> 在 C# 中?

这里 test1 是 {[0,1], [1,1], [2,1], [3,1], [4,1], [5,1], [6,1], [7,1 ], [8,1], [9,1]}

这里 test2 是 {[5,1], [6,1], [7,1], [8,1], [9,1]}

这样做之后,我希望 test1 是 {[0,1], [1,1], [2,1], [3,1], [4,1]},但它给了我原来的 test1。
如何解决这个问题?或者有没有其他方法可以做同样的事情?谢谢!

0 投票
1 回答
75 浏览

c# - 带有只读项的 ReadOnlyCollection

我有一个包含集合(Collection<MyItem> myItems)的类。我希望能够私下修改此 Collection 并通过公共属性将其作为只读返回(如果可能,在 O(1) 中)。我正在考虑使用 a ReadOnlyCollection,但问题是项目 ( MyItem) 不是只读的。所以我创建了一个只读包装类(ReadOnlyMyItem)。如何通过方括号运算符ReadOnlyCollection返回包装类 ( ReadOnlyMyItem) 而无需再次构建整个 Collection,我希望一切都保持 O(1)。

我正在考虑创建一个派生自ReadOnlyCollection( class ReadOnlyMyCollection : ReadOnlyCollection<MyItem> or class ReadOnlyMyCollection : ReadOnlyCollection<ReadOnlyMyItem> ) 的新类,它通过方括号运算符返回只读包装类 ( ReadOnlyMyItem),但是方括号运算符未标记为虚拟并且返回类型甚至不相同或构造函数没有要使用IList的包装类 ( IList<ReadOnlyMyItem>)。ReadOnlyMyCollection我应该从头开始构建类 ( ) 吗?

代码看起来像这样:

0 投票
0 回答
72 浏览

ios - 单击 IOS“更新联系人”(文本中的姓名和照片)会破坏激进的只读客户端连接

目标:拥有一个只读且分发给大约 500 个用户的激进帐户。服务器在 Apache2 后面的 Debian 10 上有问题的用户在 IOS 13 或 14 上

结果:在激进 github中引用 JSzaszvari 后,我成功创建了一个具有 rw 权限的管理员帐户和一个仅具有 r 权限的用户帐户。联系人列表在管理员和用户帐户之间进行符号链接。经过用户测试,这似乎工作得很好。拥有用户帐户的用户可以从他们的 IOS 设备连接到激进并查看所有联系人。及时获取更新,重要的是不能编辑或删除联系人。如果他们尝试编辑联系人,它会在他们的默认帐户中创建一个重复的命名联系人,并将他们所做的任何更改放在那里,保留只读联系人。

问题:到目前为止,我发现的一件事没有按预期工作是在 IOS 上弹出的文本消息中的“更新联系人”链接。当用户单击此链接时,不会创建新联系人,并且苹果似乎在手机上本地编辑了只读联系人。这会导致向只读特权帐户发送带有新数据的 PUT 请求失败。这本身不是问题,但不会发生后续的联系人读取,并且用户设备不会使用来自服务器的新联系人信息进行更新。只有在从 IOS 设置关闭并重新打开帐户后,此操作才会重置并正常工作。但是,“更新联系人”链接会在一段时间后重新出现在短信中。

尝试过:我尝试编辑权限以允许用户帐户写入虚拟帐户,然后从符号链接文件夹中读取,但我无法按照我想要的方式行事。我还考虑使用管理员帐户添加所有更新的照片,这样用户就不会再次收到弹出窗口,但有超过 400 个联系人,而且人们更新这不是一个长期的解决方案。告诉用户不要点击“更新联系人”链接也是一种选择,但很容易出现违规行为。

这是我的激进权利文件:

和 /var/log/radicale/radicale.log 当我在单击“更新联系人”后尝试同步时

有任何想法吗?

0 投票
0 回答
274 浏览

c# - 为 foreach 获取 ObjectModel.ReadOnlyCollection

我想获取对象的值和键。首先,我将其转换,然后将其放在foreach循环中以获取键和值。

我想投射时出现错误

0 投票
2 回答
51 浏览

java - 类型安全有效地只读 java 集合?

我正在为没有允许突变的方法的集合搜索 java 库。有效地不可变的只读集合。

我的意思是,没有方法。不像通常的 Java 不可变集合,它们具有类似的方法addremove在调用时抛出异常。不...我希望编译器让我知道我正在尝试做一些不允许的事情,而不是在运行时出现一些错误。

我知道它的存在是因为我使用过它,但我不记得这样的库的名称。