2017-04-06 15 views
-1

ファイルとコンソールの両方に何かを出力したい場合は、2つの文を2つの文で別々に行うか、例えばファイルとコンソールの両方に書き込むための1つの文など、より簡潔な方法がありますか?例ファイルとコンソールの両方に同じ文字列を出力する簡潔な方法はありますか?

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()への呼び出しの引数については

は複雑で長いです。

ありがとうございました。

+0

'file.WriteLine()'と 'Console.WriteLine()'の呼び出しごとに文字列が同じですか? – maccettura

+3

通常、両方に出力してからLog.Write(...)を呼び出すLogクラスを作成します。 –

+0

@maccettura:各ペアに対してyesを返します。 – Tim

答えて

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}"); 

私は好みます読みやすさのための補間(「Wait、{0}は何度ですか?」)と、params object[]のメソッドの内容が過負荷の解像度で扱いにくくなることを思い出しています。数年経っていますが、興味があれば詳細を掘り下げることができます。しかし、それについて考えると、何かがオブジェクトになる可能性があり、あなたは1つ以上の議論を持つことができ、時にはすべてが涙で終わることもあります。

+0

ありがとうございます。 String.Format()の代わりに補間を使う理由:? – Tim

+1

@Tim IIRCの 'params object []'メソッドのオーバーロードは、過負荷解決では面倒なことがありますので、私はしばらくそれをやっていないので、やってみることにしました。 –