如何像函数式编程语言一样将一个列表映射到另一个列表



我经常面临将一个列表的元素转换为另一个转换了相同元素的列表的问题。示例:

List<string> numbers = ...;
List<int> parsedNumbers = new List<int>();
foreach(var n in numbers)
  parsedNumbers.Add(parse(n));

在C#中,是否可以用另一种更简单的方式进行映射?类似numbers.Map(x -> parse(x))

var parsedNumbers = numbers.Select(n=>int.Parse(n)).ToList();

您也可以使用List的ConvertAll方法。

var parsedNumbers = numbers.ConvertAll(n => int.Parse(n));

AND较短版本

var parsedNumbers = numbers.Select(int.Parse).ToList();
var parsedNumbers = numbers.ConvertAll(int.Parse);

看起来您想要使用Linq中选择

using System.Linq;
[TestClass]
public class SelectFixture {
    private static int Parse(string str) {
        return int.Parse(str);
    }
    [TestMethod]
    public void MapStringsToInts() {
        var expected = new[] {1, 2, 3, 4, 5};
        var strings = new List<string> { "1", "2", "3", "4", "5" };
        var numbers = strings.Select(Parse).ToList();
        CollectionAssert.AreEquivalent(expected, numbers);
    }
}

最新更新