Передача объекта потока функции, где поток может быть консолью или файлом

Я хочу написать функцию, которая принимает аргумент потока. В идеале я хотел бы, чтобы этот аргумент был консолью (если я хочу, чтобы вывод выводился на экран) или файлом (если я хочу сохранить вывод).

Что-то вроде этого:

void myFunc(<some stream object> strm)
{
   strm.Write("something");
}

Как мне объявить и вызвать функцию, чтобы получить поведение, которое я ищу?


person Community    schedule 10.09.2010    source источник


Ответы (2)


Вместо Stream рассмотрите возможность использования TextWriter. Таким образом, вы можете использовать StreamWriter для записи в файлы и Console.Out для записи в консоль:

static void DoStuff(TextWriter output)
{
    output.WriteLine("doing stuff");
}

static void Main()
{
    DoStuff(Console.Out);

    using( var sw = new StreamWriter("file.txt") )
    {
        DoStuff(sw);
    }
}
person Mark    schedule 10.09.2010
comment
Да, поскольку вопрос подразумевает текстовые данные, это тоже мой выбор. - person Henk Holterman; 10.09.2010

Я полностью согласен с ответом Марка: TextWriter почти наверняка подходит.

Однако, если вам абсолютно нужно справиться с произвольным потоком, вы можете использовать Console.OpenStandardOutput(), чтобы вывести поток на консоль. Я бы настоятельно посоветовал бы вам не использовать это, если в этом нет особой необходимости.

person Jon Skeet    schedule 10.09.2010