考虑一个输入列表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) {
...
}
}
我意识到这个示例代码的一个更简单的解决方案是在调用MyClass之前执行从X到Y的转换并简单地传递Y,但请耐心等待,因为这是一个人为的例子,看看是否有人知道如何通过复制以索引为目标元素的ConvertAll。
此外,可以创建一个Tx扩展来创建一个带索引的自定义ConvertAll,但我很好奇是否可以找到一种方法使Linq(或其他)实现这一点。
答案 0 :(得分:4)
Select
+ ToList
组合怎么样? Select
有一个重载,为您提供索引:
values.Select((value, index) =>
UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()