为什么我尝试修剪List <string>中的字符串似乎不起作用?

roh*_*agg 5 foreach anonymous-methods generic-list

我在LINQPad中尝试了以下代码并获得了以下结果:

List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s) 
{ 
  s.Trim(); 
});
listFromSplit.Dump();
Run Code Online (Sandbox Code Playgroud)

"a"和"b"

所以字母b没有像我期待的那样去掉白色空间......?

有人有主意吗

[注意:.Dump()方法是LINQPad中的扩展方法,它以一种漂亮的智能格式打印出任何对象的内容]

Sci*_*ist 17

你只是创建一个修剪过的字符串,而不是为它分配任何东西.

var s = "  asd   ";
s.Trim();
Run Code Online (Sandbox Code Playgroud)

不会更新s,而..

var s = "   asd   ";
s = s.Trim();
Run Code Online (Sandbox Code Playgroud)

将..

var listFromSplit = "a, b".Split(',').Select(s=>s.Trim());
Run Code Online (Sandbox Code Playgroud)

我想,我会怎么做呢.


akm*_*mad 10

String.Trim()方法返回表示更新后的字符串的字符串.它不会更新字符串对象本身,而是创建一个新对象.

你可以这样做:

s = s.Trim();
Run Code Online (Sandbox Code Playgroud)

但是,您无法在枚举时更新集合,因此您希望在枚举现有集合时填充新列表,或者使用String.Split返回的字符串数组手动填充列表.

填写新列表:

List<string> temp = new List<string>("a, b".Split(",".ToCharArray()));
List<string> listFromSplit = new List<string>();

temp.ForEach(delegate(string s) 
{ 
    listFromSplit.Add(s.Trim()); 
});

listFromSplit.Dump();
Run Code Online (Sandbox Code Playgroud)

手动填充:

string[] temp = "a, b".Split(",".ToCharArray());
List<string> listFromSplit = new List<string>();

foreach (string s in temp)
{
    listFromSplit.Add(s.Trim()); 
};

listFromSplit.Dump();
Run Code Online (Sandbox Code Playgroud)