gpt4 book ai didi

c# - 如何展平 IEnumerables 的 IEnumerables 的串联

转载 作者:行者123 更新时间:2023-11-30 20:34:49 25 4
gpt4 key购买 nike

我知道某处有一个 LINQ 解决方案,但我看不到它。我的情况是这样的:我有一个基类(暂时称它为B),它接受可变参数并用它来初始化一个readonly 字段,恰好是一个 IReadonlyCollection(我们称这个字段为 List)。

我有两个 派生类(我们称它们为 D1D2),它们使用可变参数做完全相同的事情,将它传递给 base class 构造函数,没有问题。

但是我有第三个派生类(我们称之为D_1_and_2),派生自同一个基类,B,它接受作为参数它的构造函数有 2 个数组,一个是 D1[] 类型,另一个是 D2[] 类型。

我的问题是,我必须以某种方式将第一个参数(D1[] 参数)List 字段的所有元素相互连接起来,并与第二个参数的所有元素连接起来列出 字段并在构造期间将结果数组传递给基类。波纹管是代码中问题的说明。

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]*/){}
}

最佳答案

我认为您正在寻找 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();
}
}

关于c# - 如何展平 IEnumerables 的 IEnumerables 的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38675142/

25 4 0