1

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

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

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

4

2 回答 2

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

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

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

和更短的版本

var parsedNumbers = numbers.Select(int.Parse).ToList();
var parsedNumbers = numbers.ConvertAll(int.Parse);
于 2013-09-05T07:50:12.077 回答
1

看起来您想使用Select from 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);
    }
}
于 2013-09-05T07:56:14.880 回答