如何在命令行或文件中输出字符串,具体取决于参数,在C#?
中我有参数:
bool console = true; // or false
然后我有一些代码创建一个StringBuilder。 我想输出到Console或StreamWriter, 基于控制台变量。
棘手的部分是:
鉴于1)我将得到如下代码:
if (console ) {
Console.WriteLine(someString);
} else {
using (StreamWriter writer = new StreamWriter(file)) {
writer.WriteLine(someString);
}
}
我每次都需要添加到字符串中!
那么如何逃避这段代码膨胀?
答案 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);
...
}