我知道某处有一个LINQ
解决方案,我无法看到它。我的情况是这样的:我有一个base class
(现在称之为 B )接受一个vararg并使用它来初始化readonly
字段,成为IReadonlyCollection
(让我们调用此字段列表)。
我有两个derived classes
(让我们称之为 D1 和 D2 )与他们的vararg参数完全相同,将其传递给base class
构造函数,没有问题。
但我有第三个derived class
(让我们称之为 D_1_and_2 ),派生自相同的base class
,B,它接受作为其构造函数的数组2个数组的参数D1[]
和D2[]
类别的另一个。
我的问题是,不知何故,我必须将第一个参数的所有元素(D1[]
参数)List
字段相互连接,并与第二个参数的所有元素连接起来。 List
字段,并在构建期间将生成的数组传递给base class
。贝娄是代码中问题的一个例子。
public class CollectionElement
{
}
public class BaseClass
{
public readonly IReadOnlyCollection<CollectionElement> TheCollection;
public BaseClass(params CollectionElement[] arg)
{
TheCollection = Arrays.AsReadOnly(arg);
}
}
public class DerivedClassA : BaseClass
{
public DerivedClass(params CollectionElement[] arg)
:base(arg){}
}
public class DerivedClassB : BaseClass
{
public DerivedClass(params CollectionElement[] arg)
:base(arg){}
}
public class DerivedClassA_Plus_B : BaseClass
{
public DerivedClass(DerivedClassA[] argA, DerivedClassB[] argB)
:base(/*[don't know]*/){}
}
答案 0 :(得分:4)
我认为您正在寻找Enumerable.SelectMany
投影然后展平元素,然后Enumerable.Concat
将这两个序列连接在一起。
public class DerivedClassA_Plus_B : BaseClass
{
public DerivedClass(DerivedClassA[] argA, DerivedClassB[] argB)
:base(Combine(argA, argB)) { }
private static CollectionElement[] Combine(DerivedClassA[] argA, DerivedClassB[] argB)
{
var a = argA.SelectMany(x => x.TheCollection);
var b = argB.SelectMany(x => x.TheCollection);
return a.Concat(b).ToArray();
}
}