I want to split this line:
我想把这条线分开:
string line = "First Name ; string ; firstName";
into an array of their trimmed versions:
将它们裁剪后的版本排列成数组:
"First Name"
"string"
"firstName"
How can I do this all on one line? The following gives me an error "cannot convert type void":
我怎么能在一行里做这些呢?下面给我一个错误“无法转换类型为void”:
List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
7 个解决方案
#1
212
Try
试一试
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
FYI, the Foreach method takes an Action (takes T and returns void) for parameter, and your lambda return a string as string.Trim return a string
顺便说一下,Foreach方法对参数执行一个操作(接受T并返回void),而您的lambda以字符串的形式返回一个字符串。修剪返回一个字符串
Foreach extension method is meant to modify the state of objects within the collection. As string are immutable, this would have no effect
对于每个扩展方法,都意味着要修改集合中对象的状态。因为字符串是不可变的,所以不会有任何影响
Hope it helps ;o)
希望它帮助;o)
Cédric
塞德里克
#2
18
The ForEach
method doesn't return anything, so you can't assign that to a variable.
ForEach方法不返回任何东西,所以不能将其赋值给变量。
Use the Select
extension method instead:
使用Select extension方法代替:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
#3
4
Because p.Trim() returns a new string.
因为p.Trim()返回一个新的字符串。
You need to use:
你需要使用:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
#4
3
Alternatively try this:
或者试试这个:
string[] parts = Regex.Split(line, "\\s*;\\s*");
#5
2
try using Regex :
尝试使用正则表达式:
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
#6
1
Here's an extension method...
这是一个扩展方法……
public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
return text.Split(separator).Select(t => t.Trim()).ToArray();
}
#7
0
Use Regex
使用正则表达式
string a="bob, jon,man; francis;luke; lee bob";
String pattern = @"[,;\s]";
String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;
foreach (string item in elements){
Console.WriteLine(item.Trim());
Result:
结果:
bob
鲍勃
jon
乔恩
man
男人。
francis
弗朗西斯
luke
路加福音
lee
李
bob
鲍勃
Explain pattern [,;\s]: Match one occurrence of either the , ; or space character
解释模式[,;\s]:匹配其中一个出现的,;或空格字符
#1
212
Try
试一试
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
FYI, the Foreach method takes an Action (takes T and returns void) for parameter, and your lambda return a string as string.Trim return a string
顺便说一下,Foreach方法对参数执行一个操作(接受T并返回void),而您的lambda以字符串的形式返回一个字符串。修剪返回一个字符串
Foreach extension method is meant to modify the state of objects within the collection. As string are immutable, this would have no effect
对于每个扩展方法,都意味着要修改集合中对象的状态。因为字符串是不可变的,所以不会有任何影响
Hope it helps ;o)
希望它帮助;o)
Cédric
塞德里克
#2
18
The ForEach
method doesn't return anything, so you can't assign that to a variable.
ForEach方法不返回任何东西,所以不能将其赋值给变量。
Use the Select
extension method instead:
使用Select extension方法代替:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
#3
4
Because p.Trim() returns a new string.
因为p.Trim()返回一个新的字符串。
You need to use:
你需要使用:
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
#4
3
Alternatively try this:
或者试试这个:
string[] parts = Regex.Split(line, "\\s*;\\s*");
#5
2
try using Regex :
尝试使用正则表达式:
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
#6
1
Here's an extension method...
这是一个扩展方法……
public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
return text.Split(separator).Select(t => t.Trim()).ToArray();
}
#7
0
Use Regex
使用正则表达式
string a="bob, jon,man; francis;luke; lee bob";
String pattern = @"[,;\s]";
String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;
foreach (string item in elements){
Console.WriteLine(item.Trim());
Result:
结果:
bob
鲍勃
jon
乔恩
man
男人。
francis
弗朗西斯
luke
路加福音
lee
李
bob
鲍勃
Explain pattern [,;\s]: Match one occurrence of either the , ; or space character
解释模式[,;\s]:匹配其中一个出现的,;或空格字符