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

Pro*_*rof 5 c# linq

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

string[] args
Run Code Online (Sandbox Code Playgroud)

从命令行,例如:" - command1 xy -command2 ab -command3 c d"

在开头用" - "表示所有单词,然后将这些单词转换为大写.

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

这将返回带有以" - "小写字母开头的单词的args列表 - 即lambda未被应用.为什么是这样?是为lambda捕获创建的列表的副本,是否已修改,而不是原始列表本身?

sat*_*esh 5

var commands = args.Where(x => x.StartsWith("-")).Select(y => y.ToUpper()).ToList();
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 为什么你甚至需要提到第二种选择?第一个更简单,更容易阅读. (3认同)