通常,提供接受数组的方法可以进行优化,以接受更通用的类,这些类都是 IEnumerable
并且需要 Count
或 Length
.
示例:
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/