web-dev-qa-db-ja.com

C#6で文字列補間でエスケープ文字を使用する方法は?

私は文字列補間を使用し、それを愛していますが、出力にバックスラッシュを含めようとしていますが、それを機能させることができないという問題があります。

私が欲しいのはこのようなものです。

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"

コンボの出力が欲しい

myDomain\myUserName

私が得ているのは、\がエスケープ文字であるという構文エラーです。 \\を入力すると、snytaxエラーはなくなりますが、出力はmyDomain \\ myUsernameです

補間された文字列にエスケープ文字を含めるにはどうすればよいですか?

69
Matt

バックスラッシュ(\)によるエスケープは、中括弧を除くすべての文字に対して機能します。

中括弧({または})をエスケープする場合は、 https://msdn.Microsoft。ごとに{{または}}を使用する必要があります。 com/en-us/library/dn961160.aspx

...二重中括弧(「{{」および「}}」)のすべての出現は、単一の中括弧に変換されます。

77
birdamongmen

これを行うには、両方の$ @を使用します。順序は重要です。

var combo = $@"{domain}\{userName}";
69
Nhan
$"{domain}\\{user}"

正常に動作します-エスケープは通常どおり動作します({をエスケープする場合を除く)。少なくとも.NET 4.6およびVS 14.0.22823 D14RELで。

何らかの理由で動作しない場合(古いバージョンのコンパイラを使用している可能性がありますか?)、より明示的にすることもできます。

$"{domain}{@"\"}{user}"
4
Luaan

こんにちは、補間された文字列のバックスラッシュをエスケープするルールは、バックスラッシュを複製します:

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\\{userName}";

console output

ただし、補間された文字列を逐語的な文字列として使用する場合は、バックスラッシュをエスケープする必要はありません。

var domain = "mydomain";
var userName = "myUserName";
var combo = $@"{domain}\{userName}";

そして、あなたは同じことを得る:

console output

補間された文字列に関するチュートリアル: ビデオの補間された文字列を参照

2
freedeveloper

エドゥアルドは正しいです。二重にして中括弧をエスケープします。したがって、ドメイン変数を{mydomain}として出力する場合は、次の手順を実行する必要があります。

$"{{{domain}}}";

さらに、現在の日付が2016年9月1日であると仮定して、次の操作を行います。

$"The date is {DateTime.Now}";

ローカライズに応じて、「日付は2016/09/01 3:04:48 PM」のような出力になります。また、次のようにして日付をフォーマットすることもできます。

$"The date is {DateTime.Now : MMMM dd, yyyy}";

「日付は2016年9月1日です」と出力されます。補間された文字列ははるかに読みやすくなります。エドゥアルド、いい答えだ。

1
Dirk Strauss

私が誤解しなかった場合。ソリューションは本当にシンプルです

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{{{domain}}}\\{{{userName}}}";
Console.WriteLine(combo);

私は、そこに提供された良い参考文献と同様に野鳥の答えを共有します。お役に立てば幸いです。私の5セント

0
Eduardo