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


89

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

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

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

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

回答:


223

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

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

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


88

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

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

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

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

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

あなたがそれを好きだといいのですが!


2
リフレクションの実装と標準のstring.Formatを使用すると、どのようなパフォーマンスの低下がありますか?
スタイフル2013年

ウィキにすでにパフォーマンスページがありますね。それは非常に有望に見えます。よくやった!
スタイフル2013年

はい、パフォーマンスページはおそらくあなたの質問に対応していると思いますが、「Hello {0} "と「Hello {name}」の比較は行っていません。明らかに、反射には時間がかかります。ただし、キャッシュ機能を使用すると、解析パフォーマンスが向上し、違いを最小限に抑えることができます。いずれにせよ、物事は速いです!
スコットリッペイ2013年

1
これはもはや真実ではありません。C#6はこれを機能として追加しました
Cole Johnson

5

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

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

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


5

次の方法を使用します

1:方法1

var count = 123;
var message = $"Rows count is: {count}";

2:方法2

var count = 123;
var message = "Rows count is:" + count;

3:方法3

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4:方法4

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5:方法5

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

1
これらの各方法を使用する理由についてコメントを追加するとよいでしょう。
zombieCode
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.