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

c# - 为什么 IReadOnlyCollection 有 ElementAt 但没有 IndexOf

我正在处理一个IReadOnlyCollection对象。

现在我有点惊讶,因为我可以使用linq扩展方法ElementAt()。但我无权访问IndexOf().

这在我看来有点不合逻辑:我可以在给定位置获取元素,但我无法获取相同元素的位置。

有什么具体原因吗?

我已经阅读过 ->如何获取 IEnumerable 中元素的索引?我对回应并不完全满意。

0 投票
1 回答
214 浏览

c# - 为什么是 ReadOnlyCollection> 根据 FxCop 的说法不好,在生成不可变的二维对象时有什么替代方案?

我正在修改我的所有代码以符合 FxCop,这意味着放弃很多数组、列表以支持 ReadOnlyCollection,我同意这个建议。然而,当生产一个

替换二维数组或

CA1006:不要在成员签名中嵌套泛型类型

抱怨。首先,虽然它看起来很笨拙,但它似乎并不复杂或难以理解,因为它本质上是一个不可变List<List<T>>的,我认为考虑到数组的缺点,这非常常见。其次,我想不出存储二维数据并且不可变的替代方案,除非我要为此创建一个新类型。

请问这里的最佳做法是什么。难道这个 FxCop 规则在这里并不真正适用,应该被禁止吗?

非常感谢。

0 投票
0 回答
17 浏览

c# - 不希望 IWebElement 列表的行为

我想获得 IWebElement 列表中所有对象的“文本”属性,当我创建一个循环来遍历该列表以提取每个元素的文本时,我获得了一些文本。

0 投票
2 回答
4160 浏览

c# - Selenium:FindsBy 与集合

我是测试的初学者并且有一个问题。ReadOnlyCollection<IWebElement>如果我使用属性如何正确使用FindsBy。开始测试后,我的收藏始终为空。这是我在 C# 中的代码:

这是测试网站:http ://testwisely.com/demo/survey

我想做这样的事情: radPercentage[2].Click();

0 投票
1 回答
1407 浏览

c# - 为什么 List.AsReadOnly 返回 ReadOnlyCollection 而 Dictionary.AsReadOnly 返回 IReadOnlyDictionary?

我遇到了一个案例,List.AsReadOnly()返回 aReadOnlyCollection而不是a 的事实IReadOnlyCollection对我来说很困难。由于返回的集合是Valuea 的Dictionary,它不能自动向上转换为 a IReadOnlyCollection。这看起来很奇怪,在查看 .Net 源代码后,我确认该AsReadOnly()方法的作用List与它的作用不同Dictionary,即返回具体类而不是接口。

谁能解释这是为什么?出现这种不一致似乎是一种伤害,特别是因为我们希望尽可能使用接口,尤其是在公共时。

在我的代码中,我起初在想,由于我的消费者只是一个私有方法,我可以将其参数签名从 更改IReadOnlyDictionary<T, IReadOnlyCollection<T>>IReadOnlyDictionary<T, ReadOnlyCollection<T>>。但是,后来我意识到这使得私有方法看起来可能会修改集合值,所以我在前面的代码中添加了一个烦人的显式转换,以便正确使用接口:

哦,由于我总是混淆协变和逆变,有人可以告诉我哪个阻止了自动转换,并尝试以一种明智的方式提醒我如何在未来记住它们?(例如,对于_____ [输入/输出]参数,集合不是____variant [co/contra]。)我理解为什么不能这样,因为接口可以有很多实现,并且将所有的字典的各个元素到请求的类型。除非我连这个简单的方面都吹了而且我明白,在这种情况下,我希望你能帮助我纠正...

0 投票
1 回答
540 浏览

c# - IReadOnlyCollection 上的隐式/显式转换混淆

IReadOnlyCollection为什么编译器在尝试将不同的集合(都实现了接口)转换为 时会以不同的方式处理它们IReadOnlyCollection

我正在使用 .NET 4.5 和 VisualStudio 2015。

上述情况下的编译器错误是这样的:

类型Queue<int>// Stack<int>... 不能隐式转换为IReadOnlyCollection<int>. 存在显式转换。你缺演员吗?

(这不是实际的文本,但我相信你不会希望我在这里复制粘贴德语文本。)

如果我做演员

甚至通过

一切都很好; 它没有给我编译或运行时错误。

0 投票
1 回答
102 浏览

c# - 如何展平 IEnumerables 的 IEnumerables 的串联

我知道某处有LINQ解决方案,我只是看不到它。我的情况是这样的:我有一个(现在base class我们称之为B)接受一个可变参数并使用它来初始化一个readonly字段,这恰好是一个IReadonlyCollection(让我们称之为这个字段List)。

我有两个derived classes(我们称它们为D1D2)用它们的 vararg 参数做完全相同的事情,将它传递给base class构造函数,那里没有问题。

但是我有第三个derived class(让我们称之为D_1_and_2),派生自同一个base classB,它接受作为其构造函数 2 个数组的参数,一个是 type D1[],另一个是 type D2[]

我的问题是,不知何故,我必须将第一个参数(D1[]参数)List字段的所有元素彼此连接起来,并与第二个参数List字段的所有元素连接起来,并将结果数组传递给base class构造过程中。波纹管是代码中问题的说明。

0 投票
1 回答
1197 浏览

c# - .Net 中 ReadOnlyDictionary 和 Lookup 的区别

我仍在学习关于不可变性以及何时使用此类对象的很多知识,并且已经开始将更多查找合并到我的编码中,因为我知道它们是不可变的,因此通常比可以由客户更改的字典更好用。

话虽如此,我知道在将ReadOnlyDictionaries引入 .Net方面已经做了大量工作,但我有点困惑,每个人在哪里比另一个更有用,以及是什么让它们与众不同。我在网上查看过,但似乎找不到任何解释这种差异的文章。

例如,我看到了这个问题,并认为 Lookup 会是一个更理想的解决方案,但我不明白为什么它不会。

谁能指出我正确的方向/解释其中一个将在哪里使用。

谢谢!!

0 投票
1 回答
2877 浏览

c# - 使用 IReadOnlyCollection而不是 IEnumerable用于参数以避免可能的多次枚举

我的问题与这个有关IEnumerable<T>vs使用的问题有关IReadOnlyCollection<T>

我也一直习惯于IEnumerable<T>将集合公开为返回类型和参数,因为它受益于不可变和延迟执行。

但是,我越来越担心代码中必须枚举参数以避免 ReSharper 给出的可能的多重枚举警告的地方的扩散。我理解为什么 ReSharper 建议这样做,并且我同意它建议的代码(如下)以确保封装(即,不对调用者进行任何假设)。

但是,我发现此代码的重复性具有污染性,并且我同意一些IReadOnlyCollection<T>更好的替代方案,特别是本文中提出的观点,其中指出:

最近一直在考虑回国的利弊 IEnumerable<T>

从好的方面来说,它几乎与接口一样小,因此它为方法作者提供了比提交更重的替代方案(如IList<T>或(天堂禁止)数组)更大的灵活性。

但是,正如我在一篇文章中概述的那样,IEnumerable<T>返回会诱使调用者违反Liskov 替换原则。他们太容易使用 LINQ 扩展方法,如Last()and Count(),其语义IEnumerable<T>不承诺。

需要一种更好的方法来锁定退回的收藏品,而不会使这种诱惑如此突出。(我想起了巴尼·法夫(Barney Fife)艰难地学习这一课。)

输入IReadOnlyCollection<T>.NET 4.5 中的新功能。它只向IEnumerable<T>:属性添加了一个Count属性。通过承诺计数,您可以向呼叫者保证您IEnumerable<T>确实有一个终点站。然后他们可以Last()问心无愧地使用 LINQ 扩展方法。

然而,细心的人可能已经注意到,本文只讨论了使用IReadOnlyCollection<T>返回类型。我的问题是,相同的论点是否同样适用于将其用于参数?对此的任何理论想法或评论也将不胜感激。

事实上,我认为使用的一般经验法则是如果使用IReadOnlyCollection<T>可能存在多个枚举(相对于 ReSharper 警告)IEnumerable<T>。否则,使用IEnumerable<T>.

0 投票
3 回答
1235 浏览

c# - IList> to IReadonlyCollection>

I have a list of string array and I would like to make both collection read-only.

So I have this code:

My issue is that AttributeNames and AttributeValues assignments causes a compilation error, it seems that I can create a ReadonlyCollection of ReadonlyCollection from a non-readonly collection of non-readonly objects.

Is there something I can do other than looping over all the values and add them in the list ?

Thanks