代码之家  ›  专栏  ›  技术社区  ›  rohancragg

为什么我试图修剪列表中的字符串似乎不起作用?

  •  5
  • rohancragg  · 技术社区  · 16 年前

    我在linqpad中尝试了以下代码,得到了以下结果:

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

    “A”和“B”

    所以字母B并没有像我预期的那样去掉空白区域…?

    任何人都有什么想法

    [注意:dump()方法是linqpad中的一个扩展方法,它以智能格式打印出任何对象的内容]

    8 回复  |  直到 12 年前
        1
  •  10
  •   akmad    16 年前

    trim()方法返回一个表示更新字符串的字符串。它不更新字符串对象本身,而是创建一个新的对象。

    你可以这样做:

    s = s.Trim();
    

    但是,在枚举集合时无法更新它,因此您可能希望在枚举现有列表时填充新列表,或者使用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();
    

    手动填充:

    string[] temp = "a, b".Split(",".ToCharArray());
    List<string> listFromSplit = new List<string>();
    
    foreach (string s in temp)
    {
        listFromSplit.Add(s.Trim()); 
    };
    
    listFromSplit.Dump();
    
        2
  •  17
  •   Sciolist    16 年前

    您只是创建一个修剪过的字符串,而不是为其分配任何内容。

    var s = "  asd   ";
    s.Trim();
    

    不会更新s,而..

    var s = "   asd   ";
    s = s.Trim();
    

    威尔…

    var listFromSplit = "a, b".Split(',').Select(s=>s.Trim());
    

    我想,我会怎么做。

        3
  •  4
  •   Community SushiHangover    7 年前

    关于发布的答案 Adrian Kuhn 您可以执行以下操作:

    var result = listFromSplit.Select(s => s.Trim());
    
        4
  •  2
  •   Pablo Marambio    16 年前

    字符串实例是不可变的。任何似乎修改一个实例的操作,都会创建一个新实例。

        5
  •  1
  •   pezi_pink_squirrel    16 年前

    您没有将修剪后的结果指定给任何对象。这是一个典型的错误,我只是养成了用字符串犯错误的习惯。替换:)

        6
  •  1
  •   akuhn    16 年前

    我没有安装和运行IDE,但这应该可以完成工作(除非我错了):

    var result = from each in listFromSplit select each.Trim();
    
        7
  •  0
  •   tvanfosson    16 年前

    拆分空格和逗号,并删除所有空条目。都很漂亮,修剪得很整齐。不过,假定字符串不包含空格。

    List<string> listFromSplit =
         new List<string>( "a , b ".Split( new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries ));
    
        8
  •  0
  •   frax    12 年前

    其他人提供的LINQ选项应该工作得很好。另一个选项是使用for循环的扩展方法:

        public static void TrimCollection(this IList<string> stringCollection) {
    
            for (int i = 0; i <= stringCollection.Count() - 1; i++)
                stringCollection[i] = stringCollection[i].Trim();
    
        }
    
    推荐文章