なぜ書式指定はあるの? §
Console.WriteLine($"{……}")と書けば簡単なのに、なぜConsole.WriteLine("{0}",……)のような書式があるのでしょうか。順番を指定する文字が必要とされる分だけ冗長でもっさりしているように見えます。
実はこれ、語順が変化する国際化が絡むと便利なのです。順番を指定できると言うことは、特定の語句をはめ込む場所が前後に移動しても構わないことを意味するからです。
サンプルソースを見ると具体的な使い方が分かるでしょう。
実際には、"Tom","School"のような語句も各国語で差し替えて使います。
たいていそれらは文字列リソースに埋め込まれます。
そうすると、ローカライズは文字列リソースの差し替えだけで済むようになります。
文字列に埋め込む場所が前後しても対応できます。
罠の数々 §
- Console.WriteLine("{0}+{0}={2}", 1, 2, 3);はエラーにならず、結果は1+1=3になってしまうことに注意しよう。
参考リンク §
Console.WriteLine メソッド
String.Format メソッド
コンソールに出力するときはConsole.WriteLine メソッドだが、ほとんど同じ操作を文字列に対して行うString.Format メソッドもある。これを使うと、ほとんど何に対してでも書式整形の機能を利用できる。上記のリンクから使い方を確かめてみよう。
リポジトリ §
https://github.com/autumn009/cshowto
Format §
using System;
class Program
{
private static void sub(string format)
{
Console.WriteLine(format,"Tom","School");
}
static void Main()
{
sub("{0} goes to {1}.");
sub("{1} へ {0} は行きました。");
}
}
実行結果
Tom goes to School.
School へ Tom は行きました。