Предаване на обект на поток към функция, където потокът може да бъде конзолата или файл

Искам да напиша функция, която приема аргумент на потока. В идеалния случай бих искал този аргумент да бъде конзолата (ако искам изходът да отиде на екрана) или файл (ако искам да запазя изхода).

Нещо като това:

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

@Mark, вече изразих мнението си по темата и мразя да се повтарям. Не съхранявам XML данни в база данни, освен ако, разбира се, не е прикачен файл, кодов фрагмент или нещо, което трябва да се използва така, както е.
person Jon Skeet    schedule 10.09.2010