如果我正确理解了这个问题,您想根据它们在序列中的位置加入多个序列吗?
类中没有任何东西System.Linq.Enumerable
可以做到这一点,因为Join
和GroupJoin
方法都是基于连接键的。但是,巧合的PositionalJoin
是,几天前我为此目的编写了一个方法,在您的示例中使用:
sequenceA.PositionalJoin(sequenceB, (a, b) => new { a, b });
下面显示的方法的语义是它不需要序列长度相等,但是修改它以要求它是微不足道的。我还注释掉了参数检查的位置,因为它使用了我们的内部帮助类。
public static IEnumerable<TResult> PositionalJoin<T1, T2, TResult>(
this IEnumerable<T1> source1,
IEnumerable<T2> source2,
Func<T1, T2, int, TResult> selector)
{
// argument checking here
return PositionalJoinIterator(source1, source2, selector);
}
private static IEnumerable<TResult> PositionalJoinIterator<T1, T2, TResult>(
IEnumerable<T1> source1,
IEnumerable<T2> source2,
Func<T1, T2, TResult> selector)
{
using (var enumerator1 = source1.GetEnumerator())
using (var enumerator2 = source2.GetEnumerator())
{
bool gotItem;
do
{
gotItem = false;
T1 item1;
if (enumerator1.MoveNext())
{
item1 = enumerator1.Current;
gotItem = true;
}
else
{
item1 = default(T1);
}
T2 item2;
if (enumerator2.MoveNext())
{
item2 = enumerator2.Current;
gotItem = true;
}
else
{
item2 = default(T2);
}
if (gotItem)
{
yield return selector(item1, item2);
}
}
while (gotItem);
}
}
不确定这是否正是您正在寻找的,但希望能有所帮助。