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

标签 c# linq

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

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 捕获制作了列表的副本,并且修改了它,而不是原始列表本身?

最佳答案

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());

关于c# - 使用 ForEach lambda 修改列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32389528/

相关文章:

c# - 如何使用 LINQ 从列表中获取逗号分隔的值列表?

javascript - 如何将资源中的正则表达式模式插入到 string.Format 中?

c# - 如何判断 IQueryable 是否为 IOrderedQueryable?

c# - LINQ 查询 C# ASP

C# linq 从列表的子列表构建表

c# - 在 Linq 中使用 Expression<Func<T,X>> 包含扩展

c# - Linq 计数与 IList 计数

c# - 如何在托管 C++ 中正确实现带有事件的 C# 接口(interface)

c# - IIS 后台线程和 SignalR

c# - WCF 底层连接关闭 : An unexpected error occurred on a receive