C#List ConvertAll with Index

时间:2018-02-11 05:09:10

标签: c# list linq

考虑一个输入列表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(或其他)实现这一点。

1 个答案:

答案 0 :(得分:4)

Select + ToList组合怎么样? Select有一个重载,为您提供索引:

values.Select((value, index) => 
      UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()