{"id":2235,"date":"2025-04-21T16:26:58","date_gmt":"2025-04-21T16:26:58","guid":{"rendered":"https:\/\/www.w3computing.com\/articles\/?p=2235"},"modified":"2025-04-21T16:27:02","modified_gmt":"2025-04-21T16:27:02","slug":"mastering-raw-string-literals-clean-multi-line-code-csharp-11","status":"publish","type":"post","link":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/","title":{"rendered":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings, especially those that include special characters like backslashes, quotes, or need to preserve indentation. Whether you&#8217;re building JSON, XML, HTML, SQL queries, or even Regex patterns, you\u2019ll soon find raw string literals indispensable for writing clean, readable, and bug-resistant code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial, we\u2019ll go from the very basics of raw string literals to more advanced, real-world use cases. We\u2019ll write code snippets, explore pitfalls, and even refactor some messy legacy strings into elegant raw strings.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What Are Raw String Literals?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prior to C# 11, working with strings that spanned multiple lines or included many escape characters was clunky at best. Let\u2019s look at a simple example from pre-C#11 days:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> json = <span class=\"hljs-string\">\"{\\n  \\\"name\\\": \\\"Alice\\\",\\n  \\\"age\\\": 30\\n}\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Sure, it works. But it\u2019s unreadable and fragile. You need to manually escape every double quote and newline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now in C# 11:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> json = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n{\n  \"<\/span>name<span class=\"hljs-string\">\": \"<\/span>Alice<span class=\"hljs-string\">\",\n  \"<\/span>age<span class=\"hljs-string\">\": 30\n}\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it. What you see is what you get. Clean. Simple. No escaping necessary. This is a <em>raw string literal<\/em>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Basic Syntax of Raw String Literals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Raw string literals are defined using triple double-quotes (<code>\"\"\"<\/code>) instead of regular double-quotes (<code>\"<\/code>). The content inside a raw string literal is preserved exactly as typed\u2014spacing, newlines, quotes, everything.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Basic Example<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> message = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\nHello, world!\nWelcome to raw string literals in C#.\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This produces exactly the string you see. Line breaks and all.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Including Quotes Inside the String<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">What if you want to include <code>\"<\/code> inside your string? With raw string literals, it&#8217;s just as easy.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> quote = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\nShe said, \"<\/span>C<span class=\"hljs-meta\"># 11 raw strings are awesome!\"<\/span>\n<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\";<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">No escaping needed. The raw string handles it cleanly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Dealing with More Quotes Inside the String<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s say your string contains triple quotes itself. C# 11 allows you to <em>increase<\/em> the number of quotes to disambiguate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example with Triple Quotes Inside the Content<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> tricky = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\nThis string contains a raw string literal like this: \"<\/span><span class=\"hljs-string\">\"\"<\/span>\n<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Notice how we opened and closed the string using <strong>five double-quotes<\/strong> to accommodate the triple quotes inside.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">General rule: if your string includes <code>n<\/code> quotes in a row, then use at least <code>n + 1<\/code> quotes to define your raw string.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Indentation in Raw Strings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s where raw strings shine even more\u2014multi-line code blocks that keep their indentation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s take an example of embedding an HTML template:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> html = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    &lt;html&gt;\n        &lt;head&gt;&lt;title&gt;Hello&lt;\/title&gt;&lt;\/head&gt;\n        &lt;body&gt;\n            &lt;p&gt;This is a raw string literal&lt;\/p&gt;\n        &lt;\/body&gt;\n    &lt;\/html&gt;\n    \"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Notice that the closing triple quotes are aligned to the indentation you want stripped from the content. Everything before that point is treated as \u201ccommon leading whitespace\u201d and removed from each line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want no indentation removed, just align the closing <code>\"\"\"<\/code> to the very start of the line:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> html = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n&lt;html&gt;\n    &lt;head&gt;&lt;title&gt;Hello&lt;\/title&gt;&lt;\/head&gt;\n    &lt;body&gt;\n        &lt;p&gt;This is raw string literal&lt;\/p&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Raw Strings vs Verbatim Strings (<code>@\"\"<\/code>)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You might wonder, \u201cDidn\u2019t we already have multi-line strings with verbatim strings?\u201d Kind of. But not really.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> oldWay = <span class=\"hljs-string\">@\"This is line one.\nThis is line two.\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">The Limitations of Verbatim Strings:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quotes still have to be escaped by doubling them (<code>\"\"<\/code>)<\/li>\n\n\n\n<li>No control over leading indentation<\/li>\n\n\n\n<li>Poor readability for code-like content (e.g., SQL, JSON)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Now compare this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> json = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n{\n  \"<\/span>firstName<span class=\"hljs-string\">\": \"<\/span>John<span class=\"hljs-string\">\",\n  \"<\/span>lastName<span class=\"hljs-string\">\": \"<\/span>Doe<span class=\"hljs-string\">\",\n  \"<\/span>isActive<span class=\"hljs-string\">\": true\n}\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">No escaping. No guessing. Just paste your content as-is. Raw strings are the new gold standard for multi-line literals.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Real-World Examples: Refactoring to Raw Strings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s roll up our sleeves and refactor some older style code to raw string literals.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Refactor 1: JSON Configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before (Pre-C# 11):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> config = <span class=\"hljs-string\">\"{\\n  \\\"apiKey\\\": \\\"abc123\\\",\\n  \\\"timeout\\\": 30\\n}\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>After (C# 11):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> config = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n{\n  \"<\/span>apiKey<span class=\"hljs-string\">\": \"<\/span>abc123<span class=\"hljs-string\">\",\n  \"<\/span>timeout<span class=\"hljs-string\">\": 30\n}\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Refactor 2: SQL Query<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> query = <span class=\"hljs-string\">\"SELECT * FROM Users WHERE CreatedAt &gt; '2021-01-01'\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Not bad. But what about multi-line queries?<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> query = <span class=\"hljs-string\">\"SELECT Id, Name, Email\\nFROM Users\\nWHERE IsActive = 1\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>After:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> query = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\nSELECT Id, Name, Email\nFROM Users\nWHERE IsActive = 1\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Now your SQL is clean, readable, and easy to copy from SSMS or elsewhere.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Embedding Raw Strings in Interpolated Strings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Raw strings also support interpolation!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just prefix with <code>$\"\"\"<\/code> instead of just <code>\"\"\"<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> name = <span class=\"hljs-string\">\"Alice\"<\/span>;\n<span class=\"hljs-keyword\">string<\/span> greeting = <span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\nHello, {name}!\nWelcome to the new era of strings.\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">And yes, even multi-line interpolations work smoothly:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> section = <span class=\"hljs-string\">\"Body\"<\/span>;\n<span class=\"hljs-keyword\">string<\/span> html = <span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\n&lt;html&gt;\n  &lt;head&gt;&lt;title&gt;My Page&lt;\/title&gt;&lt;\/head&gt;\n  &lt;{section}&gt;\n    &lt;p&gt;Hello, world!&lt;\/p&gt;\n  &lt;\/{section}&gt;\n&lt;\/html&gt;\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Escaping Braces in Interpolated Raw Strings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s a fun one\u2014what if your content contains <code>{<\/code> or <code>}<\/code> that <em>shouldn\u2019t<\/em> be treated as interpolation?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can control this by increasing the number of <code>$<\/code> signs used in front of the quote.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> template = $<span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\nThis is a template with {{braces}} that are not interpolated.\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Rule of thumb: if your string has <code>n<\/code> levels of curly braces, use <code>n + 1<\/code> dollar signs to escape them from being interpolated.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Raw Strings in Regex<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Regex is notorious for its use of backslashes and quotes. Raw strings make it bearable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> pattern = <span class=\"hljs-string\">@\"^(\\d{3})-(\\d{2})-(\\d{4})$\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>After:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> pattern = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n^(\\d{3})-(\\d{2})-(\\d{4})$\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Cleaner. Simpler. No escaping required.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even better\u2014add interpolation if you want to build patterns dynamically:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> areaCode = <span class=\"hljs-string\">\"123\"<\/span>;\n<span class=\"hljs-keyword\">string<\/span> regex = <span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\n^({areaCode})-(\\d{{2}})-(\\d{{4}})$\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Multi-Line Logging or Embedded Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine writing a big HTML email template or logging a blob of structured text:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> emailTemplate = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n&lt;html&gt;\n  &lt;body&gt;\n    &lt;h1&gt;Welcome!&lt;\/h1&gt;\n    &lt;p&gt;Thanks for joining our service.&lt;\/p&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Or structured logs:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">string<\/span> log = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n&#91;\n  { \"<\/span>timestamp<span class=\"hljs-string\">\": \"<\/span><span class=\"hljs-number\">2025<\/span><span class=\"hljs-number\">-03<\/span><span class=\"hljs-number\">-27<\/span>T15:<span class=\"hljs-number\">30<\/span>:<span class=\"hljs-number\">00<\/span>Z<span class=\"hljs-string\">\", \"<\/span>level<span class=\"hljs-string\">\": \"<\/span>INFO<span class=\"hljs-string\">\", \"<\/span>message<span class=\"hljs-string\">\": \"<\/span>Startup complete<span class=\"hljs-string\">\" },\n  { \"<\/span>timestamp<span class=\"hljs-string\">\": \"<\/span><span class=\"hljs-number\">2025<\/span><span class=\"hljs-number\">-03<\/span><span class=\"hljs-number\">-27<\/span>T15:<span class=\"hljs-number\">31<\/span>:<span class=\"hljs-number\">00<\/span>Z<span class=\"hljs-string\">\", \"<\/span>level<span class=\"hljs-string\">\": \"<\/span>WARN<span class=\"hljs-string\">\", \"<\/span>message<span class=\"hljs-string\">\": \"<\/span>Low memory<span class=\"hljs-string\">\" }\n]\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Previously, these were a nightmare to format properly. Now? Just paste and go.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Use Cases You\u2019ll Love<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s quickly run through some top use cases where raw strings are game-changers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 JSON configurations<\/li>\n\n\n\n<li>\u2705 HTML or XML templates<\/li>\n\n\n\n<li>\u2705 SQL queries<\/li>\n\n\n\n<li>\u2705 Email templates<\/li>\n\n\n\n<li>\u2705 Regex patterns<\/li>\n\n\n\n<li>\u2705 Logging formats<\/li>\n\n\n\n<li>\u2705 Markdown blocks<\/li>\n\n\n\n<li>\u2705 Code generation templates (e.g., Roslyn, T4)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Any time you&#8217;re pasting content from somewhere and need to preserve format\u2014raw strings are your new best friend.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes and Best Practices<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before we wrap up, let\u2019s touch on some important best practices and common mistakes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Indentation matters.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Always align your closing quotes carefully if you want to preserve indentation. Misaligned quotes can result in surprising leading spaces or trimmed content.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Avoid excessive quoting.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you find yourself using six or more quotes just to wrap content, consider whether you can simplify or split the string.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Combine with interpolated raw strings wisely.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Don\u2019t overdo string interpolation. If your raw string has more curly braces than variables, it might be better to avoid interpolation and use <code>string.Replace<\/code> instead.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Don\u2019t forget about localization.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Raw strings are great, but if you\u2019re building a localizable app, stick to resources for user-visible strings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Don\u2019t abuse them.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not everything needs to be a raw string. A one-line message? Just use <code>\"Hello world\"<\/code> and move on. Raw strings shine when things get messy.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Mini Code Generator: Generate C# Class from Field List<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s build a <strong>mini code generation tool<\/strong> using raw string literals. This example will dynamically generate a C# class with properties from a list of field names.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System;\n<span class=\"hljs-keyword\">using<\/span> System.Collections.Generic;\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Program<\/span>\n{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\n    {\n        <span class=\"hljs-keyword\">var<\/span> className = <span class=\"hljs-string\">\"Person\"<\/span>;\n        <span class=\"hljs-keyword\">var<\/span> fields = <span class=\"hljs-keyword\">new<\/span> List&lt;(<span class=\"hljs-keyword\">string<\/span> type, <span class=\"hljs-keyword\">string<\/span> name)&gt;\n        {\n            (<span class=\"hljs-string\">\"string\"<\/span>, <span class=\"hljs-string\">\"FirstName\"<\/span>),\n            (<span class=\"hljs-string\">\"string\"<\/span>, <span class=\"hljs-string\">\"LastName\"<\/span>),\n            (<span class=\"hljs-string\">\"int\"<\/span>, <span class=\"hljs-string\">\"Age\"<\/span>),\n            (<span class=\"hljs-string\">\"bool\"<\/span>, <span class=\"hljs-string\">\"IsActive\"<\/span>)\n        };\n\n        <span class=\"hljs-keyword\">string<\/span> classCode = GenerateClass(className, fields);\n        Console.WriteLine(classCode);\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">GenerateClass<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">string<\/span> className, List&lt;(<span class=\"hljs-keyword\">string<\/span> type, <span class=\"hljs-keyword\">string<\/span> name<\/span>)&gt; fields)<\/span>\n    {\n        <span class=\"hljs-keyword\">string<\/span> properties = <span class=\"hljs-string\">\"\"<\/span>;\n\n        <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> (type, name) <span class=\"hljs-keyword\">in<\/span> fields)\n        {\n            properties += <span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\n        public {type} {name} {{ get; set; }}\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n        }\n\n        <span class=\"hljs-keyword\">string<\/span> classTemplate = <span class=\"hljs-string\">$\"\"<\/span><span class=\"hljs-string\">\"\nnamespace GeneratedCode\n{{\n    public class {className}\n    {{\n{properties}\n    }}\n}}\n\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\n\n        <span class=\"hljs-keyword\">return<\/span> classTemplate;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0d Output<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">namespace GeneratedCode\n{\n    public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n    <\/span>{\n        public string FirstName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n        public string LastName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n        public int Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n        public bool IsActive { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n    }\n}\n&lt;code&gt;&lt;span style=\"background-color: initial; font-family: inherit; font-size: inherit; text-align: initial;\"&gt;&lt;\/span&gt;&lt;\/code&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Raw string literals make templating like this so much easier and more readable\u2014no escaping, no clunky string concatenation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">C# 11 raw string literals are not just a syntax convenience\u2014they\u2019re a big leap toward code that\u2019s more maintainable, readable, and error-resistant. Whether you&#8217;re embedding long templates, writing config data, or just want fewer backslashes in your life, raw strings help you focus on the real logic instead of escaping every little character.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The moment you get comfortable with them, you\u2019ll find yourself cleaning up old code and smiling at how much better it looks. And that\u2019s the mark of a great language feature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings, especially those that include special characters like backslashes, quotes, or need to preserve indentation. Whether you&#8217;re building JSON, XML, HTML, SQL queries, or even Regex patterns, you\u2019ll soon find raw string literals [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,4],"tags":[],"class_list":["post-2235","post","type-post","status-publish","format-standard","category-csharp","category-programming-languages","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mastering Raw String Literals for Clean Multi-Line Code in C# 11<\/title>\n<meta name=\"description\" content=\"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mastering Raw String Literals for Clean Multi-Line Code in C# 11\" \/>\n<meta property=\"og:description\" content=\"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-21T16:26:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-21T16:27:02+00:00\" \/>\n<meta name=\"author\" content=\"w3compadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3compadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/\"},\"author\":{\"name\":\"w3compadmin\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"headline\":\"Mastering Raw String Literals for Clean Multi-Line Code in C# 11\",\"datePublished\":\"2025-04-21T16:26:58+00:00\",\"dateModified\":\"2025-04-21T16:27:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/\"},\"wordCount\":1062,\"articleSection\":[\"C#\",\"Programming Languages\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/\",\"name\":\"Mastering Raw String Literals for Clean Multi-Line Code in C# 11\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\"},\"datePublished\":\"2025-04-21T16:26:58+00:00\",\"dateModified\":\"2025-04-21T16:27:02+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"description\":\"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Articles Home\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programming Languages\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/programming-languages\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mastering Raw String Literals for Clean Multi-Line Code in C# 11\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\",\"name\":\"Developer Articles Hub\",\"description\":\"\",\"alternateName\":\"Developer Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\",\"name\":\"w3compadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"caption\":\"w3compadmin\"},\"sameAs\":[\"http:\\\/\\\/w3computing.com\\\/articles\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11","description":"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/","og_locale":"en_US","og_type":"article","og_title":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11","og_description":"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings","og_url":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/","article_published_time":"2025-04-21T16:26:58+00:00","article_modified_time":"2025-04-21T16:27:02+00:00","author":"w3compadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3compadmin","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/#article","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/"},"author":{"name":"w3compadmin","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"headline":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11","datePublished":"2025-04-21T16:26:58+00:00","dateModified":"2025-04-21T16:27:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/"},"wordCount":1062,"articleSection":["C#","Programming Languages"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/","url":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/","name":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/#website"},"datePublished":"2025-04-21T16:26:58+00:00","dateModified":"2025-04-21T16:27:02+00:00","author":{"@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"description":"When C# 11 introduced raw string literals, it quietly solved one of the most awkward and long-standing challenges in .NET programming\u2014handling multi-line strings","breadcrumb":{"@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.w3computing.com\/articles\/mastering-raw-string-literals-clean-multi-line-code-csharp-11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Articles Home","item":"https:\/\/www.w3computing.com\/articles\/"},{"@type":"ListItem","position":2,"name":"Programming Languages","item":"https:\/\/www.w3computing.com\/articles\/programming-languages\/"},{"@type":"ListItem","position":3,"name":"Mastering Raw String Literals for Clean Multi-Line Code in C# 11"}]},{"@type":"WebSite","@id":"https:\/\/www.w3computing.com\/articles\/#website","url":"https:\/\/www.w3computing.com\/articles\/","name":"Developer Articles Hub","description":"","alternateName":"Developer Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.w3computing.com\/articles\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561","name":"w3compadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","caption":"w3compadmin"},"sameAs":["http:\/\/w3computing.com\/articles"]}]}},"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"w3compadmin","author_link":"https:\/\/www.w3computing.com\/articles\/author\/w3compadmin\/"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/comments?post=2235"}],"version-history":[{"count":2,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2235\/revisions"}],"predecessor-version":[{"id":2237,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2235\/revisions\/2237"}],"wp:attachment":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/media?parent=2235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/categories?post=2235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/tags?post=2235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}