質問:
C# の文字列値を、タブや改行などのエスケープ シーケンスを含む文字列リテラルに変換することはできますか?たとえば、タブ文字と改行文字を含む文字列を、エスケープ シーケンス「t」と「rn」を含む文字列に変換します。
答え:
伝統的な方法:
1 つの方法が長い間使用されてきました。
<code class="language-csharp">private static string ToLiteral(string input) { using (var writer = new StringWriter()) { using (var provider = CodeDomProvider.CreateProvider("CSharp")) { provider.GenerateCodeFromExpression(new CodePrimitiveExpression(input), writer, null); return writer.ToString(); } } }</code>
このメソッドを使用すると、次のような文字列を変換できます:
<code class="language-csharp">var input = "\tHello\r\n\tWorld!";</code>
出力結果は次のとおりです:
<code>"\tHello\r\n\tWorld!"</code>
Roslyn を使用する代わりに:
新しい方法には、NuGet の Microsoft.CodeAnalysis.CSharp パッケージが含まれます。更新されたコードは次のとおりです:
<code class="language-csharp">private static string ToLiteral(string valueTextForCompiler) { return Microsoft.CodeAnalysis.CSharp.SymbolDisplay.FormatLiteral(valueTextForCompiler, false); }</code>
このメソッドを使用すると、文字列を次のように変換して、前のメソッドと同じ結果を得ることができます:
<code class="language-csharp">var input = "\tHello\r\n\tWorld!"; Console.WriteLine(ToLiteral(input));</code>
出力結果は次のとおりです:
<code>"\tHello\r\n\tWorld!"</code>
以上がC#文字列を逃げた文字列リテラルに変換する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。