如何在命令行或文件中输出字符串,具体取决于C#中的参数?

时间:2014-02-24 13:39:12

标签: c#

如何在命令行或文件中输出字符串,具体取决于参数,在C#?

我有参数:

bool console = true; // or false

然后我有一些代码创建一个StringBuilder。 我想输出到Console或StreamWriter, 基于控制台变量。

棘手的部分是:

  1. 我需要一次性写小片,而不是整个字符串
  2. 鉴于1)我将得到如下代码:

    if (console ) {
        Console.WriteLine(someString);
    } else {
        using (StreamWriter writer = new StreamWriter(file)) {
            writer.WriteLine(someString);
        }
    }
    
  3. 我每次都需要添加到字符串中!

    那么如何逃避这段代码膨胀?

4 个答案:

答案 0 :(得分:3)

您不需要自己创建界面;您只需更改代码即可将TextWriter作为输入:

private void DoSomethingAndWriteLog(TextWriter writer)
{
    // Do something
    var someString = "Test";
    writer.WriteLine(someString);
}

然后,您可以使用Console。Out和自定义TextWriter调用此方法:

if (console)
{
    DoSomethingAndWriteLog(Console.Out);
} 
else 
{
    using (StreamWriter writer = new StreamWriter(file)) 
    {
        DoSomethingAndWriteToLog(writer);
    }
}

答案 1 :(得分:2)

作为一般化案例,您可以定义输出编写器接口

interface IOutputWriter
{
    void WriteLine(string s);
}

然后编写符合该接口的2个类,并将适当的类注入到代码中。

void YourCode (IOutputWriter writer)
{ 
     // ...
     writer.WriteLine(output);
}

void Main()
{
    IOutputWriter writer;
    if (console)
    { 
        writer = new ConsoleWriter();
    }
    else
    { 
        writer = new StreamWriter();
    }
    YourCode (writer);

}

然后,您可以稍后定义IOutputWriter的新实现以应对新要求(例如:PrinterWriter,DatabaseWriter等)。

答案 2 :(得分:2)

您可以通过调用Console.SetOut并将StreamWriter作为参数传递来将Console.WriteLine输出设置为文件:

if (needToOutputToFile)
{
    Console.SetOut (streamWriter);
}
Console.WriteLine ("This is written in a file, if needToOutputToFile is true");

答案 3 :(得分:0)

您可以尝试使用Console.Out标准编写器和三元运算符

  using (TextWriter writer = console ? Console.Out : new StreamWriter(file)) {
    ...
    writer.WriteLine(someString);
    ...
  }