考虑一个输入列表 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 并简单地传递 Y 之前执行从 X 到 Y 的转换,但请耐心等待,因为这是一个人为的示例,看看是否有人知道一种方法复制以目标元素索引为条件的 ConvertAll。
此外,还可以创建 Tx 扩展来创建带有索引的自定义 ConvertAll,但我很好奇是否可以找到一种方法让 Linq(或其他方式)实现这一目标。
最佳答案
Select
+ToList
组合怎么样? Select
有一个重载,可以为您提供索引:
values.Select((value, index) =>
UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()
关于C# 带有索引的列表 ConvertAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728464/