c# - 要提供哪种参数类型(即 IEnumerable 且具有 Count)?

标签 c# .net arrays generics

通常,提供接受数组的方法可以进行优化,以接受更通用的类,这些类都是 IEnumerable 并且需要 CountLength .

示例:

public static T NextObject<T>(this Random random, T[] array)
{
    return array[random.Next(array.Length)];
}

在这里,我使用Array来获取特定元素,并知道元素的数量。一般来说,哪个类最适合这个?

  • 列表
  • ICollection - 还有Count
  • 其他接口(interface)或类或一组不同的接口(interface)?

认为IEnumerable可能不是一个好主意,因为如果底层枚举器是Count(),可能会对性能产生副作用更复杂。

最佳答案

您需要按索引和集合中的项目计数来访问项目。您还希望集合/界面中的其他成员更少

                      | IList<T> | ICollection<T> | IEnumerable<T> | T[]
Access by index       |     +    |        -       |        -       |   +
Count of items        |     +    |        +       |        -       |   +
Less unwanted members |     -    |        +       |        +       |   ~

如您所见,ICollection 和 IEnumerable 不符合您的需求。我认为选择 IList 或数组没有太大区别。 IList 可能比数组更轻量,但它有很多不需要的操作(添加、删除、清除),并且对于数组,您可以使用 params 这通常很方便。

关于c# - 要提供哪种参数类型(即 IEnumerable 且具有 Count)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528421/

相关文章:

c# - 如何在更新查询中将格式为 test@test1.com 的电子邮件地址传递给 Access DB

c# - 反射、属性和属性选择

.net - 将命令行传递给单实例应用程序的第一个实例

python - 最快的可变数据持有者

C# 泛型协变

c# - Asp.net Response.Redirect - 不正确的推荐人

c# - 是否可以查看对象是否在没有泛型类型参数的情况下继承了 IDictionary?

c# - Asp.Net Core Web Api 中端点之间的内存缓存似乎有所不同

java - 字节数组是什么意思?

c - 使用函数调用设置数组元素的值