【问题标题】:Trim the contents of a String array in C#在 C# 中修剪字符串数组的内容
【发布时间】:2012-12-21 13:23:15
【问题描述】:
    String []lines = System.IO.File.ReadAllLines(path);
    foreach (String line in lines)
    {
        line.Trim();
    }

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

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

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

【问题讨论】:

  • 你在问如何让它变得更好?
  • 问题是Is the only way to do this an old-school for loop?你看不到吗?
  • 我完全没有看到is :D
  • 不,for循环不是唯一的方法,但它可能是最好的方法。

标签: c# visual-studio-2005 .net-2.0 trim


【解决方案1】:
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();

【讨论】:

  • 我最初错过了可能至关重要的 .NET 2 标签;所有这些 lambda 东西都不可用是吗?
  • 我在 .NET 2.0 中添加了一个使用示例。
  • @Eve,我在编辑之前用List&lt;string&gt; 添加了我的答案。 :-)
  • 在我看来,问题中的 for 循环比这里提供的方法更简单、更干净(GC 压力更小)。
【解决方案2】:

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

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

【讨论】:

  • 这不是问题,只是对知识的追求
【解决方案3】:

根据this,我们在.NET 2.0 中有List&lt;string&gt;

所以,试试List&lt;string&gt;

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

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

然后您可以使用ToArray()List&lt;string&gt; 转换为数组。

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

 public String[] TrimAnArray(String[] lines)
 {
     List<string> yourLinesTrimed = new List<string>;
     foreach (String line in lines)
     {
         yourLinesTrimed.Add(line.Trim());
     }
     return yourLinesTrimed.ToArray();
 }

【讨论】:

    【解决方案4】:

    你也可以使用 LINQ:

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

    编辑:

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

    【讨论】:

    • @John 哦,抱歉,错过了您使用的是 .net 2.0。但是在 .Net 2.0 中使用 LINQ 有一些变通方法,但我宁愿使用 for 循环。
    • .NET 2.0 不支持 LINQ 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多