StreamWriter через Linq

У меня есть массив файлов, для которых нужно производить запись/удаление текста.

string[] arrayMass = new string[] { "file1.txt", "file2.txt", "file3.txt" };
using (StreamWriter writer = new StreamWriter("people.txt", true))
{
   writer.WriteLine("");
}

Как мне вместо "people.txt" подставить массив arrayMass не используя цикл for и foreach, а сделать через LINQ?


Ответы (1 шт):

Автор решения: aepot

А чем вас цикл foreach не устраивает? И нет, в Linq нету того что вам нужно. Последняя буква LINQ - "Q" означает "Query", то есть "запрос", а запрос должен что-то возвращать. Ваш код не возвращает ничего, следовательно это не "запрос".

Если вы имеете в виду под Linq паттерн Fluent Interface с делегатами, то у List<T> есть метод .ForEach, который кстати не Fluent, потому что ничего не возвращает void. В случае с массивом, вы можете написать метод расширения сами.

public static class ArrayExtensions
{
     public static void ForEach<T>(this T[] array, Action<T> action)
     {
         foreach (T item in array)
         {
             action(item);
         }
     }
}

Это точный аналог того что есть у List<T>.

И вот так использовать.

string[] arrayMass = new string[] { "file1.txt", "file2.txt", "file3.txt" };
arrayMass.ForEach(x =>
{
    using (StreamWriter writer = new StreamWriter(x, true))
    {
        writer.WriteLine("");
    }
});

Только я в этом никаких преимуществ перед обычным foreach циклом не вижу. А вы?


Кстати, если вам нужно создать пустой файл и ничего туда не писать, это можно сделать так File.Create(path).Close();.

→ Ссылка