使用ForEach lambda修改列表中的元素

本文关键字:元素 列表 修改 ForEach lambda 使用 | 更新日期: 2023-09-27 18:11:12

我想过滤一个字符串数组:

string[] args

从命令行,例如:"-command1 x y -command2 a b -command3 c d"

取所有以'-'开头的单词,然后将其转换为大写。

var commands = args.Where(x => x.StartsWith("-")).ToList<String>();
commands.ForEach(x => {
    x.ToUpper()
    });
commands.ToString();

这将返回以小写'-'开头的单词的args列表-即没有应用lambda。为什么会这样?是否为lambda捕获制作了列表的副本,并对其进行了修改,而不是原始列表本身?

使用ForEach lambda修改列表中的元素

var commands = args.Where(x => x.StartsWith("-")).Select(y => y.ToUpper()).ToList();

var upperCommands = new List<String>();
var commands = args.Where(x => x.StartsWith("-")).ToList<String>();
    commands.ForEach(x => upperCommands.Add(
        x.ToUpper());