string.formatはvb vs c#を逃がします
-
29-09-2019 - |
質問
string.formatで単一の引用を逃れる方法を検索している間、私はで答えを見つけました SO:string.format()で単一の引用を逃がす
しかし、VBでは違うようです。私はそれをテストしました、そして実際にC#のニーズ
string s = DateTime.Now.ToString("MMM d \\'yy 'at' H:mmm");
VBが必要です
Dim s As String = Now.ToString("MMM d \'yy 'at' H:mmm")
なぜC#が二重のバックスラッシュを必要とし、VBが単一のバックスラッシュを必要とするのですか?これはC#ユーザーにとっては少しばかげた質問かもしれませんが、C#を読むことはできますが、書くことに慣れていません。
解決
C#では、文字列リテラルには、新しい行の場合は n、タブの場合は tなどのエスケープシーケンスを含めることができます。見積もりでは。 @"MMM ..."
)そして、同じ文字列A VBを取得します。
VBでは、逃げることは決して許可されていないため、バックスラッシュから逃れる必要はありません。
他のヒント
その理由は、C#が文字列リテラル内のエスケープシーケンスをサポートしているためです。 \
キャラクター。 VBにはそのような脱出メカニズムがないため、シングル \
aとして解釈されます \
.
C#では、逐語的な文字列を使用して同じ動作を得ることができます
@"MMM d \'yy 'at' H:mmm"
C#では、バックスラッシュには意味があります( nはnewline tタブ....)。したがって、backlslahs自体はエスケープキャラクターです - 脱出しなければなりません:)または文字列の前に座っている - これは「非逃げられた文字列」(通常はパスに使用される)を作ります
C#で逃げます。あなたのテキストは、「H:MMM」で「mmm d 'yy」になります。文字列のキャラクターを逃れる必要はありません。一方、「文字列に文字列に載っている」場合は、 "h:mmm"で文字列「mmm d "yy " at "yy "を終わらせないように脱出する必要があります。または、 @""文字列メソッドを使用することもできます。