是否有一种简洁的方法将相同的字符串输出到文件和控制台?

时间:2017-04-06 19:37:12

标签: c#

如果我想在文件和控制台上输出内容,我应该在两个语句中分别做两件事,还是有更简洁的方法,例如,一个语句用于写入文件和控制台?< / p>

例如

System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt");
...
file.WriteLine(string.Format(...) + string.Format(...));
Console.WriteLine(string.Format(...) + string.Format(...));
...
file.WriteLine(string.Format(...) + string.Format(...));
Console.WriteLine(string.Format(...) + string.Format(...));
...
file.WriteLine(string.Format(...) + string.Format(...));
Console.WriteLine(string.Format(...) + string.Format(...));
...
file.WriteLine(string.Format(...) + string.Format(...));
Console.WriteLine(string.Format(...) + string.Format(...));
...
file.Close();

调用string.Format()的参数很复杂且很长。

感谢。

1 个答案:

答案 0 :(得分:5)

编写一个函数方法,同时执行这两个操作。将它放在具有文件流或其他任何内容的类中,并保留副本。

public void Write(string fmt, params object[] args) {
    var str = String.Format(fmt, args);
    _file.WriteLine(str);
    Console.WriteLine(str);
}

如果您正在使用C#6,请为该方法指定一个字符串参数,并使用插值而不是String.Format()个参数:

public void Write(string str) {
    _file.WriteLine(str);
    Console.WriteLine(str);
}

...

_log.Write($"My {vehicle} is full of {seaCreature}s, it is {damageDescription}");

我更喜欢插值以提高可读性(&#34;等等,什么是{0}?&#34;)因为我记得params object[]方法的东西在重载解析时会变得棘手。已经过了几年但如果有兴趣我可以挖掘细节。但想想看,任何东西都可以成为一个对象,你可以有一个或多个论点,有时它们都会流泪。