我想写一小段测试代码来提醒我某些集合是等价的,即简单、自包含、易于阅读和面向 LINQ Lambda(以实现个人学习目标)。
这是我想出的:
var e = new IEnumerable<int> [] {
                                    Enumerable.Range(100, 4).ToArray(), 
                                    new int[] { 100, 101, 102, 103 },
                                    new [] { 100, 101, 102, 103 },
                                    Enumerable.Range(100, 4).ToList(), 
                                    new List<int> { 100, 101, 102, 103 }
                                };
var permutations = e.SelectMany(s => e, ( lhs, rhs ) => new { lhs,  rhs })
                    .Where( x => !x.lhs.Equals ( x.rhs ) ); 
foreach (var item in permutations)
{
    Assert.That( item.lhs, Is.EqualTo( item.rhs ) );
}
Q1。是否有一个“简单”的改变来产生 10 对组合(我目前有 20 对排列)?“简单”是指使用现有的 LINQ 运算符,而不是说编写递归扩展方法。
Q2。有没有更好的方法在上下文中断言“数组的所有成员都是等效的”?
至于Q1,这似乎给了我右手边(rhs),但我如何“携带”(或重新加入)“原始”给我左手边(lhs)?:
var r = e.SelectMany(( e1, i ) => e.Skip( i + 1 ));