就像我看到的那样,大多数IEnumerable扩展都会吞噬IEnumerable然后呕吐IEnumerable。是否有可能制作一个扩展方法,它可以吃任何IEnumerable(如List)然后返回相同的类型 - List?
例如,我想迭代集合,如果出错,我会抛出异常,但如果一切正常,我需要返回相同的实例(相同的类型)。
答案 0 :(得分:3)
您需要使用两个通用参数:
public static TEnumerable Foo<TEnumerable, TItem>(this TEnumerable sequence)
where TEnumerable: IEnumerable<TItem>
{
return sequence;
}
请注意,由于此更改,您在调用此方法时无法推断通用参数;你必须明确指定它们。
答案 1 :(得分:2)
我不知道这样做有什么用处,但你可以像这样解决问题的泛型部分:
public static TEnumerable MyExtensionMethod<T, TEnumerable>(this TEnumerable enumerable)
where TEnumerable : IEnumerable<T>
{
...
}
但是,您可能会发现很难实际实现这样的事情,因为没有通用的方法来创建您想要返回的TEnumerable
。
例如,我想迭代集合,如果出错,我会抛出异常,但如果一切正常,我需要返回相同的实例(相同的类型)。
以下扩展方法无法实现您真正想要的吗?我不明白你为什么要返回同一个实例。
public static void Consume<T>(this IEnumerable<T> enumerable)
{
foreach (var item in enumerable)
{
// Do nothing
}
}