我想做一个 convertAll 通用的函数,比如
public static Iout ConvertAll<Iin, Iout, T, TOutput>(this Iin source, Converter<T, TOutput> converter)
where Iin : IEnumerable<T>
where Iout : IEnumerable<TOutput>
{
foreach (var item in source)
yield return converter(item);
}
问题是视觉工作室告诉我:
'Sgd.CollectionExtensions.ConvertAll(Iin, System.Converter)' 的主体不能是迭代器块,因为 'Iout' 不是迭代器接口类型
问题是我有 where 子句,所以它应该像迭代器一样被识别,不是吗?
我也尝试:
public static I<TOutput> ConvertAll<I, T, TOutput>(this I<T> source, Converter<T, TOutput> converter)
where I : IEnumerable
{
foreach (var item in source)
yield return converter(item);
}
但它说
类型参数“I”不能与类型参数一起使用
所以我不知道该怎么办。我不想要这样的功能:
public static IEnumerable<TOutput> ConvertAll<T, TOutput>(this IEnumerable<T> source, Converter<T, TOutput> converter)
{
foreach (var item in source)
yield return converter(item);
}
它更简单并且可以正常工作,但是它返回一个 IEnumerable 并且我希望输出中的迭代器与输入中的迭代器相同
希望你能帮助我谢谢