问题标签 [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# - 为什么 IReadOnlyCollection 有 ElementAt 但没有 IndexOf
我正在处理一个IReadOnlyCollection
对象。
现在我有点惊讶,因为我可以使用linq
扩展方法ElementAt()
。但我无权访问IndexOf()
.
这在我看来有点不合逻辑:我可以在给定位置获取元素,但我无法获取相同元素的位置。
有什么具体原因吗?
我已经阅读过 ->如何获取 IEnumerable 中元素的索引?我对回应并不完全满意。
c# - 为什么是 ReadOnlyCollection> 根据 FxCop 的说法不好,在生成不可变的二维对象时有什么替代方案?
我正在修改我的所有代码以符合 FxCop,这意味着放弃很多数组、列表以支持 ReadOnlyCollection,我同意这个建议。然而,当生产一个
替换二维数组或
抱怨。首先,虽然它看起来很笨拙,但它似乎并不复杂或难以理解,因为它本质上是一个不可变List<List<T>>
的,我认为考虑到数组的缺点,这非常常见。其次,我想不出存储二维数据并且不可变的替代方案,除非我要为此创建一个新类型。
请问这里的最佳做法是什么。难道这个 FxCop 规则在这里并不真正适用,应该被禁止吗?
非常感谢。
c# - 不希望 IWebElement 列表的行为
我想获得 IWebElement 列表中所有对象的“文本”属性,当我创建一个循环来遍历该列表以提取每个元素的文本时,我获得了一些文本。
c# - Selenium:FindsBy 与集合
我是测试的初学者并且有一个问题。ReadOnlyCollection<IWebElement>
如果我使用属性如何正确使用FindsBy
。开始测试后,我的收藏始终为空。这是我在 C# 中的代码:
这是测试网站:http ://testwisely.com/demo/survey
我想做这样的事情: radPercentage[2].Click();
c# - 为什么 List.AsReadOnly 返回 ReadOnlyCollection 而 Dictionary.AsReadOnly 返回 IReadOnlyDictionary?
我遇到了一个案例,List.AsReadOnly()
返回 aReadOnlyCollection
而不是a 的事实IReadOnlyCollection
对我来说很困难。由于返回的集合是Value
a 的Dictionary
,它不能自动向上转换为 a IReadOnlyCollection
。这看起来很奇怪,在查看 .Net 源代码后,我确认该AsReadOnly()
方法的作用List
与它的作用不同Dictionary
,即返回具体类而不是接口。
谁能解释这是为什么?出现这种不一致似乎是一种伤害,特别是因为我们希望尽可能使用接口,尤其是在公共时。
在我的代码中,我起初在想,由于我的消费者只是一个私有方法,我可以将其参数签名从 更改IReadOnlyDictionary<T, IReadOnlyCollection<T>>
为IReadOnlyDictionary<T, ReadOnlyCollection<T>>
。但是,后来我意识到这使得私有方法看起来可能会修改集合值,所以我在前面的代码中添加了一个烦人的显式转换,以便正确使用接口:
哦,由于我总是混淆协变和逆变,有人可以告诉我哪个阻止了自动转换,并尝试以一种明智的方式提醒我如何在未来记住它们?(例如,对于_____ [输入/输出]参数,集合不是____variant [co/contra]。)我理解为什么不能这样,因为接口可以有很多实现,并且将所有的字典的各个元素到请求的类型。除非我连这个简单的方面都吹了而且我不明白,在这种情况下,我希望你能帮助我纠正...
c# - IReadOnlyCollection 上的隐式/显式转换混淆
IReadOnlyCollection
为什么编译器在尝试将不同的集合(都实现了接口)转换为 时会以不同的方式处理它们IReadOnlyCollection
?
我正在使用 .NET 4.5 和 VisualStudio 2015。
上述情况下的编译器错误是这样的:
类型Queue<int>
// Stack<int>
... 不能隐式转换为IReadOnlyCollection<int>
. 存在显式转换。你缺演员吗?
(这不是实际的文本,但我相信你不会希望我在这里复制粘贴德语文本。)
如果我做演员
甚至通过
一切都很好; 它没有给我编译或运行时错误。
c# - 如何展平 IEnumerables 的 IEnumerables 的串联
我知道某处有LINQ
解决方案,我只是看不到它。我的情况是这样的:我有一个(现在base class
我们称之为B)接受一个可变参数并使用它来初始化一个readonly
字段,这恰好是一个IReadonlyCollection
(让我们称之为这个字段List)。
我有两个derived classes
(我们称它们为D1和D2)用它们的 vararg 参数做完全相同的事情,将它传递给base class
构造函数,那里没有问题。
但是我有第三个derived class
(让我们称之为D_1_and_2),派生自同一个base class
B,它接受作为其构造函数 2 个数组的参数,一个是 type D1[]
,另一个是 type D2[]
。
我的问题是,不知何故,我必须将第一个参数(D1[]
参数)List
字段的所有元素彼此连接起来,并与第二个参数List
字段的所有元素连接起来,并将结果数组传递给base class
构造过程中。波纹管是代码中问题的说明。
c# - .Net 中 ReadOnlyDictionary 和 Lookup 的区别
我仍在学习关于不可变性以及何时使用此类对象的很多知识,并且已经开始将更多查找合并到我的编码中,因为我知道它们是不可变的,因此通常比可以由客户更改的字典更好用。
话虽如此,我知道在将ReadOnlyDictionaries引入 .Net方面已经做了大量工作,但我有点困惑,每个人在哪里比另一个更有用,以及是什么让它们与众不同。我在网上查看过,但似乎找不到任何解释这种差异的文章。
例如,我看到了这个问题,并认为 Lookup 会是一个更理想的解决方案,但我不明白为什么它不会。
谁能指出我正确的方向/解释其中一个将在哪里使用。
谢谢!!
c# - 使用 IReadOnlyCollection而不是 IEnumerable用于参数以避免可能的多次枚举
我的问题与这个有关IEnumerable<T>
vs使用的问题有关IReadOnlyCollection<T>
。
我也一直习惯于IEnumerable<T>
将集合公开为返回类型和参数,因为它受益于不可变和延迟执行。
但是,我越来越担心代码中必须枚举参数以避免 ReSharper 给出的可能的多重枚举警告的地方的扩散。我理解为什么 ReSharper 建议这样做,并且我同意它建议的代码(如下)以确保封装(即,不对调用者进行任何假设)。
但是,我发现此代码的重复性具有污染性,并且我同意一些IReadOnlyCollection<T>
更好的替代方案,特别是本文中提出的观点,其中指出:
最近一直在考虑回国的利弊
IEnumerable<T>
。从好的方面来说,它几乎与接口一样小,因此它为方法作者提供了比提交更重的替代方案(如
IList<T>
或(天堂禁止)数组)更大的灵活性。但是,正如我在上一篇文章中概述的那样,
IEnumerable<T>
返回会诱使调用者违反Liskov 替换原则。他们太容易使用 LINQ 扩展方法,如Last()
andCount()
,其语义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>
.
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