这种选择使用哪个 C# 集合的策略缺少什么?

发布于 2024-09-13 09:08:39 字数 415 浏览 8 评论 0原文

以下是我选择使用哪种 C# 集合类型的策略:

  • 如果集合中的项目数量是固定的,则使用数组,例如:

    string[] Directions = new string[] { "north", "south", "east", "west" };

  • 否则始终使用List

  • 当然,除非您需要更专门的集合,例如< code>Stack、Queue或 Dictionary

  • 但不再使用 ArrayList

根据您的经验,此策略缺少什么?

Here's my strategy for choosing which C# collection type to use:

  • if number of items in collection is fixed, then use an array, e.g.:

    string[] directions = new string[] { "north", "south", "east", "west" };

  • otherwise always use List<T>

  • unless of course you need a more specialized collection, e.g. Stack<T>, Queue<T>, or Dictionary<TKey, TValue>

  • but never use ArrayList anymore

Based on your experience, what is missing from this strategy?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁的年少不轻狂 2024-09-20 09:08:39

你的规则运作良好。

另外:

  • 始终优先选择通用(或专用)集合而不是非通用(基于对象)的集合。
  • 如果您只想检查是否存在而不是键值映射(通过 Dictionary 表示),请使用 HashSet
  • 对于字典,如果排序看起来很重要,请考虑使用有序映射(SortedList<...>SortedDictionary<...>)。
  • 如果中间有删除/插入操作,请使用链表。

当然,最重要的一点是:

  • 永远不要导出具体的集合类型:始终使用最通用的接口,在大多数情况下是 - IListIEnumerable代码>.

Your rules work fine.

In addition:

  • Always perfer generic (or specialized) collections over ungeneric (object-based) ones.
  • Use HashSet<T> if you want to check for mere existence instead of key-value-mappings (which is represented through Dictionary).
  • In case of dictionaries, consider the use of ordered maps (SortedList<...>, SortedDictionary<...>) if ordering seems important.
  • Use linked lists if you have remove/insert operations in the middle.

and of course the most important one:

  • Never export concrete collection types: Always use the most general interface, which is - in the most cases - IList<T> or IEnumerable<T>.
我一直都在从未离去 2024-09-20 09:08:39

我想说,在大多数情况下,即使我知道集合中的项目数量,我也会使用 List,仅仅是因为它提供的实用函数数量以及与 LINQ 的兼容性。

当您希望更快地访问集合中的项目时,哈希图是一个重要的用例。

I'd say that in the majority of cases, even if I knew the number of items in a collection, I'd use List, simply for the number of utility functions it provides and compatibility with LINQ.

Hashmaps are an important use case, for when you would want faster access to items within the collection.

嘿哥们儿 2024-09-20 09:08:39

如果您打算重写继承类中的添加/删除/清除方法,因为存在虚拟方法,您也可以使用Collection

You can also use Collection<T> if you plan to override add/remove/clear methods in an inherited class because there are virtual methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文