6
    String []lines = System.IO.File.ReadAllLines(path);
    foreach (String line in lines)
    {
        line.Trim();
    }

显然这不起作用,因为String.Trim将 Trimmed 版本作为新字符串返回。而你做不到line = line.Trim()。那么,这样做的唯一方法是老派for循环吗?

    for(int i=0;i<lines.Length;++i)
    {
        lines[i] = lines[i].Trim();
    }

注意我仅限于 Visual Studio 2005 即 .Net 2.0

4

4 回答 4

8
lines.Select(l => l.Trim()).ToArray();

或者,对于 .NET 2.0:

static IEnumerable<string> GetTrimmed(IEnumerable<string> array)
{
    foreach (var s in array)
        yield return s.Trim();
}

通过以下方式使用:

lines = new List<string>(GetTrimmed(lines)).ToArray();
于 2012-12-21T13:25:08.637 回答
1

据此,我们List<string>.NET 2.0 中。

因此,尝试使用List<string>.

String []lines = System.IO.File.ReadAllLines(path);

List<string> yourLinesTrimed = new List<string>;
foreach (String line in lines)
{
        yourLinesTrimed.Add(line.Trim());
}

然后,您可以List<string>使用ToArray().

让我们构建一个执行此操作的方法:

 public String[] TrimAnArray(String[] lines)
 {
     List<string> yourLinesTrimed = new List<string>;
     foreach (String line in lines)
     {
         yourLinesTrimed.Add(line.Trim());
     }
     return yourLinesTrimed.ToArray();
 }
于 2012-12-21T13:27:44.847 回答
1

“那么,这样做的唯一方法是老式的 for 循环吗?” 是的,在 .NET 2 上你没有 Linq 的东西。但老实说,“老派的 for 循环”也是最有效、最易读和最短的方法。所以有什么问题?

for(int i = 0; i < lines.Length; i++)
    lines[i] = lines[i].Trim();
于 2012-12-21T13:35:56.353 回答
0

你也可以使用 LINQ:

String []lines = System.IO.File.ReadAllLines(path)
                .Select(line => line.Trim())
                .ToArray();

编辑:

如果您仅限于 .NET 2.0,那么我会坚持使用 for 循环,就像您在第二个代码示例中所做的那样。我认为没有更好的方法可以做到这一点,for循环就足够有效了。当然,有一些解决方法可以让 LINQ 在 .NET 2.0 中工作,但我认为这不值得。

于 2012-12-21T13:25:50.683 回答