Обрезать содержимое строкового массива в C#

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

очевидно, что это не работает, потому что String.Trim возвращает обрезанную версию в виде новой строки. И ты не можешь этого сделать!--3-->. Так что это единственный способ сделать это старой школы for петли?

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

Примечание я ограничен Visual Studio 2005, т. е. .Net 2.0

4 ответов


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 у вас нет материала Linq. Но, честно говоря," старая школа для цикла " также является наиболее эффективным, наиболее читаемым и кратчайшим подходом. Так в чем проблема?

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

по данным этой, мы 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();
 }

вы также можете использовать LINQ:

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

EDIT:

Если вы ограничены .NET 2.0, то я бы придерживался for-loop, как вы сделали во втором примере кода. Я не думаю, что есть намного лучшие способы сделать это, for-loop достаточно эффективен. Конечно, есть некоторые обходные пути для работы LINQ в .NET 2.0, но я не думаю, что это стоит того.