Soalan:
Adakah mungkin untuk menukar nilai rentetan C# kepada literal rentetan yang mengandungi urutan pelarian, seperti tab dan baris baharu? Sebagai contoh, tukar rentetan yang mengandungi aksara tab dan baris baharu kepada rentetan yang mengandungi urutan pelarian "t" dan "rn"?
Jawapan:
Kaedah tradisional:
Satu kaedah telah digunakan untuk masa yang lama:
<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>
Menggunakan kaedah ini, anda boleh menukar rentetan seperti ini:
<code class="language-csharp">var input = "\tHello\r\n\tWorld!";</code>
Hasil output ialah:
<code>"\tHello\r\n\tWorld!"</code>
Alternatif untuk menggunakan Roslyn:
Kaedah yang lebih baharu melibatkan pakej Microsoft.CodeAnalysis.CSharp daripada NuGet. Berikut ialah kod yang dikemas kini:
<code class="language-csharp">private static string ToLiteral(string valueTextForCompiler) { return Microsoft.CodeAnalysis.CSharp.SymbolDisplay.FormatLiteral(valueTextForCompiler, false); }</code>
Menggunakan kaedah ini, anda boleh mendapatkan hasil yang sama seperti kaedah sebelumnya, menukar rentetan seperti ini:
<code class="language-csharp">var input = "\tHello\r\n\tWorld!"; Console.WriteLine(ToLiteral(input));</code>
Hasil output ialah:
<code>"\tHello\r\n\tWorld!"</code>
Atas ialah kandungan terperinci Bagaimana cara menukar rentetan C# ke literasi rentetan yang melarikan diri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!