【发布时间】:2015-09-04 03:18:08
【问题描述】:
我要过滤一个字符串数组:
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 捕获制作了一份列表副本,并且该副本已被修改,而不是原始列表本身?
【问题讨论】:
-
1.您没有将
x.ToUpper()设置为任何内容。 2. 但即使你这样做了,它也不会编译:字符串是不可变的。你应该这样做:var commands = args.Where(x => x.StartsWith("-")).Select(x => x.ToUpper()).ToList();