问题标签 [icollection]

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 投票
3 回答
1544 浏览

.net - 为什么 Queue(T) 和 Stack(T) 没有实现 ICollection(T)?

在我问之前,让我得到一个明显的答案:接口ICollection<T>包含一个Remove删除任意元素的方法,它Queue<T>不能Stack<T>真正支持(因为它们只能删除“结束”元素)。

好的,我意识到这一点。实际上,我的问题并不是专门针对Queue<T>orStack<T>集合类型。相反,它是关于不为本质上是值集合的任何泛型类型实现ICollection<T>的设计决策T

这就是我觉得奇怪的地方。假设我有一个接受任意集合的方法T,并且出于我正在编写的代码的目的,了解集合的大小会很有用。例如(以下代码很简单,仅用于说明!):

现在,这段代码真的没有理由不能对 aQueue<T>或 a进行操作Stack<T>,只是这些类型没有实现ICollection<T>。当然,他们确实实现ICollection了——我猜主要是为了这个Count属性——但这会导致奇怪的优化代码,如下所示:

完全放弃ICollection接口不是更有意义(当然,我的意思不是放弃实现,因为这将是一个破坏性的变化;我的意思是,停止使用它),并简单地ICollection<T>用显式实现来实现没有完美匹配的成员?

我的意思是,看看ICollection<T>提供了什么:

  • Count-Queue<T>两者Stack<T>都有这个。
  • IsReadOnly-Queue<T>并且Stack<T>容易拥有这个。
  • Add--Queue<T>可以明确地实现这一点(with Enqueue),也可以Stack<T>(with Push)。
  • Clear- 查看。
  • Contains- 查看。
  • CopyTo- 查看。
  • GetEnumerator——检查(呃)。
  • Remove——这是唯一一个没有完美匹配的人Queue<T>Stack<T>

这是真正的踢球者:ICollection<T>.Remove 返回 abool ; 所以一个显式的实现Queue<T>可以完全(例如)检查要删除的项目是否实际上是头元素(使用Peek),如果是,则调用Dequeue并返回true,否则返回false。可以很容易地用和Stack<T>给出类似的实现。PeekPop

好吧,既然我已经写了大约一千字关于为什么认为这是可能的,我提出一个明显的问题:为什么设计者没有实现这个接口?Queue<T>Stack<T>也就是说,是什么设计因素(我可能没有考虑)导致决定这将是错误的选择?为什么ICollection改为实施?

我想知道,在设计我自己的类型时,我是否应该考虑关于接口实现的任何指导原则,而我在提出这个问题时可能会忽略这些指导原则。例如,显式实现通常不完全支持的接口是否只是被认为是不好的做法(如果是这样,这似乎与例如List<T>实现冲突IList)?队列/堆栈的概念与所代表的内容之间是否存在概念上的脱节ICollection<T>

基本上,我觉得必须有一个很好的理由Queue<T>(例如)实现ICollection<T>,并且我不想只是盲目地设计自己的类型并以不适当的方式实现接口而没有被告知和充分考虑我在做什么。

我为这个超长的问题道歉。

0 投票
4 回答
15707 浏览

c# - IEnumerable 和 IEnumerable 之间的区别?

IEnumerable和 和有什么不一样IEnumerable<T>

我已经看到许多框架类都实现了这两个接口,因此我想知道实现这两个接口有什么好处?

请看一下它们是如何定义的:

正如我们所见,IEnumerable<T>派生自IEnumerable,这意味着任何IEnumerable拥有、IEnumerable<T>继承的东西,那么为什么我们要实现两者而不是仅仅实现IEnumerable<T>呢?实施IEnumerable<T>还不够吗?

同样,还有其他类似的对:

  • IListIList<T>
  • ICollectionICollection<T>

我也想知道这些。

0 投票
3 回答
2654 浏览

collections - 无法将 System.Object[] 转换为 System.Collections.Generic.List

我有一个带有对象参数的方法。

我发现将对象转换为IList作品。

但是,将其转换为 aList不会。

我查看了 theIList和 the的定义,List它们似乎都实现了EnumeratorandCollection接口。我想知道为什么List不起作用但IList确实起作用。它在框架中的哪个位置崩溃,为什么?

0 投票
7 回答
15090 浏览

c# - 如何隐藏接口的某些成员

我想创建一个自定义集合来实现ICollection.

但我不想暴露一些ICollection类似Clear方法的成员。

如何做到这一点?

0 投票
2 回答
932 浏览

c# - 使用支持集合实现 ICollection 时的代码合同警告

我有这个代码:

我收到这些警告:

  • 添加:CodeContracts:确保未经证实:this.Count >= Contract.OldValue(this.Count)
  • 明确:CodeContracts:确保未经证实:this.Count == 0
  • 包含: CodeContracts:确保未经证实:!Contract.Result<bool>() || this.Count > 0
  • CopyTo:CodeContracts:需要未经证实的:arrayIndex + this.Count <= array.Length

我该如何解决这些问题?有什么办法可以压制这些吗?

0 投票
1 回答
1932 浏览

c# - C# 从 SettingsPropertyCollection 获取属性

我的 web.config 中有配置文件提供程序

如何获取包含所有可用属性的字符串 [] 数组(CustomField1、CustomField2 ....)

编辑: 找到可行的解决方案,但不确定它是否是最好和最简单的解决方案。

0 投票
3 回答
324 浏览

c# - 确定对 ICollection Count 的调用是否会导致迭代

假设我想从 a 访问一个对象Collection,并且我想确保它不会Collection为了确定大小而遍历整个对象。

如何确定和控制调用是否Count导致实际迭代集合?(除了使用我自己的实现ICollection),换句话说,有没有提供这个的实现?

回答程序员英雄的问题。我想我可以让一个IEnumerable<T>集合向其中添加一百万个文档,并计算它以查看调用的速度有多快Count

我问了这个问题,因为我可能会选择使用IEnumerableover Collection,因为我的集合的数量和每个项目的数据都非常大,一次返回所有这些将是一个问题。

但是,我也想知道它的缺点IEnumarable,Joshua 在另一个问题中指出锁定它不是一个好主意。

0 投票
2 回答
327 浏览

c# - 为什么 IList 和 ICollection 的通用对应项没有相同的方法集?

有什么特别的原因可以解释为什么 和 的通用对应物IList没有ICollection相同的方法和属性集?他们似乎把他们搬来搬去。

前任。 IList<T>拥有

但是IList

0 投票
5 回答
667 浏览

c# - 拆分 ICollection带定界符序列

这是针对 C# 3.5

我有 ICollection,我试图将其拆分为单独的 ICollection,其中分隔符是一个序列。

例如

会导致

0 投票
1 回答
782 浏览

list - C# 尝试使用静态索引计数器创建自己的列表

我想自己做List一个有能力的工作foreach loop。还有其他重要的命令List,比如 IndexOf (这是我唯一不喜欢 List 的地方,因为它是动态变化的)。我列表中的一个必须跟踪所有索引。以及Add, Contains, Count, Remove, 以及[]访问器(不知道如何做到这一点)所以现在Get应该可以解决问题。

List 应该被转换为一个名为 Entity 的基类,该基类在其他两个类 Npc / Player 之间共享,因为它具有相似性。

无论如何,我无法控制客户端我也在编写这个服务器,但是协议规范要求所有玩家跟踪索引,而不需要对常规 List 对索引进行任何剧烈的动态更改。

我一直在学习如何制作自己的教程,Collections我遇到了 3 个我无法解决的错误。



另外我想问一下我这样做对吗?或者看起来很狡猾的东西。

感谢您的帮助,我很感激.. C# 的这一部分似乎非常先进且难以掌握概念。

实体列表的来源

EntityListEnumerator 的来源

}