【发布时间】:2016-10-30 12:33:37
【问题描述】:
我正在创建一些我想在不同集合上使用的扩展方法,主要是那些实现 IList 和数组集合 [] 的扩展方法,每当我创建扩展方法时,我需要创建 2 而不是仅仅 1 以便它两者都适用
public static IList<T> Shuffle<T>(this IList<T> inputCollection)
{
}
public static T[] Shuffle<T>(this T[] inputCollection)
{
}
我的大多数方法都需要使用索引,所以我不能使用IEnumerable 是否有其他方法可以只编写 1 个扩展方法并将其用于两个所需的集合?有时我也会使用string,这是另一种方法。
【问题讨论】:
-
如果您要返回一个新集合,那么 IEnumerable 就足够了。但你肯定不想这样做,所以 ICollection 是正确的风格。
-
数组实现
IList<T>,因此您可能不需要其中之一(取决于实现)。 -
选项 1 是使用由两个数组和
List<T>实现的非泛型IList接口,另一个选项是为实现 IList但从底层数组读取和写入的数组创建包装器,在在数组 ext 方法中你可以 new Wrapper(array).ListExtMethod() -
@csharpfolk 你不需要包装器。
T[]已经实现IList<T>
标签: c# arrays list generics collections