我正在尝试以下方法
string tl = " aaa, bbb, ccc, dddd eeeee";
var tags = new List<string>();
tags.AddRange(tl.Split(','));
tags.ForEach(x => x = x.Trim().TrimStart().TrimEnd());
var result = String.Join(",", tags.ToArray());
但它不起作用,标签总是返回为“aaa”,“bbb”。
如何修剪列表中的所有元素?
7条答案
按热度按时间dy2hfwbg1#
如果你只需要最终结果字符串,而不是中间集合,那么你可以使用正则表达式来整理字符串,你需要基准测试来确定正则表达式是否优于分割-修剪-连接技术:
b5buobof2#
遇到了同样的问题。@Lee已经解释过Lamda. ForEach()使用了一个副本。
你可以像这样写一个扩展方法,并使用一个for循环(foreach也是不可能的):
像这样使用它:
应导致:列表(){" 11111 "," 22222 "}
我没有使用拆分和重新连接的解决方案(选择的解决方案),因为其中一个字符串项目中可能有逗号。正则表达式版本不是自解释的。这是老派的,但更安全,可以很容易地理解...
svgewumm3#
您的方法不起作用的原因是
x
是ForEach
调用中正在处理的当前字符串引用的副本(即委托的本地),因此赋值不会影响列表中引用的项。voase2hg4#
试试看
hs1rzwqc5#
现在的情况是,您试图使用
foreach
语句修改集合-这是一个禁忌。集合不能用foreach
修改。你需要把它修改为
for
循环,或者,使用lambdas,你可以使用LukeH的解决方案。ars1skjm6#
问题是dddd和eeeee之间没有逗号,如果希望它们分开,需要在
' '
上拆分,去掉逗号,然后修剪多余的空格。2izufjch7#
这可以通过LINQ one liner轻松完成:
请记住经验法则:
SELECT-〉用于转换元素
WHERE-〉用于过滤元素
现在,我们可以使用SELECT子句来转换所有元素:
就这样,事情都做完了。