我怎样才能把一根绳子分割成一根线?

时间:2021-01-14 21:40:51

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]:匹配其中一个出现的,;或空格字符