web-dev-qa-db-ja.com

文字列内で変数を使用する

PHPでは、次のことができます。

$name = 'John';
$var = "Hello {$name}";    // => Hello John

C#に同様の言語構成体はありますか?

String.Format();があることは知っていますが、文字列の関数/メソッドを呼び出さなくてもできるかどうか知りたいです。

71
thwd

C#6では、 文字列補間 を使用できます。

string name = "John";
string result = $"Hello {name}";

Visual Studioでこれを強調する構文により、非常に読みやすくなり、すべてのトークンがチェックされます。

182
Fenton

この機能は、C#5以下には組み込まれていません。
更新:C#6は文字列補間をサポートするようになりました。新しい回答を参照してください。

これを行うための推奨される方法は、String.Formatを使用することです。

string name = "Scott";
string output = String.Format("Hello {0}", name);

ただし、(リフレクションを介して)名前付きプレースホルダーを使用できるようにString.Formatを拡張する SmartFormat という小さなオープンソースライブラリを作成しました。だから、あなたはすることができます:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

あなたがそれを好き願っています!

78
Scott Rippey

C#5(-VS2013)までは、関数/メソッドを呼び出す必要があります。 String.Formatなどの「通常の」関数、または+演算子のオーバーロード。

string str = "Hello " + name; // This calls an overload of operator +.

C#6(VS2015)では、文字列補間が導入されました(他の回答で説明されています)。

5
Anders Abel