C#列出带有索引的ConvertAll

rod*_*amn 1 c# linq list

考虑一个输入列表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(或其他方式)实现此目标的方法。

Mar*_*zek 5

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

values.Select((value, index) => 
      UseConversionA(index) ? ConversionA(value) : ConversionB(value)).ToList()
Run Code Online (Sandbox Code Playgroud)