146

我想分割这条线:

string line = "First Name ; string ; firstName";

到他们修剪版本的数组中:

"First Name"
"string"
"firstName"

我怎样才能在一条线上完成这一切?以下给了我一个错误“无法转换类型 void”:

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
4

9 回答 9

347

尝试

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

仅供参考,Foreach 方法采用 Action(采用 T 并返回 void)作为参数,并且您的 lambda 以字符串形式返回字符串。Trim 返回字符串

Foreach 扩展方法旨在修改集合中对象的状态。由于字符串是不可变的,这将没有效果

希望它有所帮助;o)

塞德里克

于 2009-11-13T10:10:14.270 回答
26

ForEach方法不返回任何内容,因此您不能将其分配给变量。

请改用Select扩展方法:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
于 2009-11-13T10:11:12.067 回答
8

.net 5 之后,解决方法很简单:

List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);
于 2021-11-22T22:05:29.193 回答
5

因为 p.Trim() 返回一个新字符串。

你需要使用:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
于 2009-11-13T10:11:39.150 回答
4

这是一个扩展方法...

    public static string[] SplitAndTrim(this string text, char separator)
    {
        if (string.IsNullOrWhiteSpace(text))
        {
            return null;
        }

        return text.Split(separator).Select(t => t.Trim()).ToArray();
    }
于 2015-05-29T15:34:42.213 回答
2

或者试试这个:

string[] parts = Regex.Split(line, "\\s*;\\s*");
于 2013-07-24T09:08:16.343 回答
2

尝试使用正则表达式:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
于 2015-07-07T10:58:20.850 回答
0

拆分返回 string[] 类型。写一个扩展方法:

public static string[] SplitTrim(this string data, char arg)
{
    string[] ar = data.Split(arg);
    for (int i = 0; i < ar.Length; i++)
    {
        ar[i] = ar[i].Trim();
    }
    return ar;
}

我喜欢您的解决方案,所以我决定添加它并使其更可用。

public static string[] SplitAndTrim(this string data, char[] arg)
{
    return SplitAndTrim(data, arg, StringSplitOptions.None);
}

public static string[] SplitAndTrim(this string data, char[] arg, 
StringSplitOptions sso)
{
    string[] ar = data.Split(arg, sso);
    for (int i = 0; i < ar.Length; i++)
        ar[i] = ar[i].Trim();
    return ar;
}
于 2019-02-22T16:37:14.457 回答
-1

使用正则表达式

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());

结果:

鲍勃

乔恩

男人

弗朗西斯

卢克

鲍勃

解释模式 [,;\s]:匹配出现的 , ; 或空格字符

于 2016-12-21T01:50:34.637 回答