考虑一个输入列表X,它由Tx类型的对象组成,您需要为其运行以下几个函数之一,y_a = A(x),y_b = B(x),等等...(所有这些输出对象的(Ty)生成输出列表Y。最后,转换函数的选择取决于列表中元素的索引。
理想情况下,解决方案将是单线解决方案(Linq,我在找您)。
将其放入代码中:
public OtherType ConversionA (int n) {
}
public OtherType ConversionB (int n) {
}
class MyClass {
public MyClass (List<int> values)
: this (values.ConvertAllWithIndex((value, index) =>
UseConversionA (index) ? ConversionA (value) : ConversionB (value)) {
}
public MyClass (List<OtherType> things) {
...
}
bool UseConversionA (int index) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到此示例代码的一个更简单的解决方案是在调用MyClass并简单地传递Y之前执行从X到Y的转换,但是请耐心等待,因为这是一个人为的示例,用于查看是否有人知道复制ConvertAll的方法。以目标元素的索引为条件。
另外,可以创建对Tx的扩展以使用索引创建自定义ConvertAll,但是我很好奇是否可以找到一种使Linq(或其他方式)实现此目标的方法。
怎么样Select+ ToList组合?Select有一个过载,为您提供了索引:
values.Select((value, index) =>
UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()
Run Code Online (Sandbox Code Playgroud)