{"id":1294,"date":"2023-03-31T07:54:07","date_gmt":"2023-03-31T00:54:07","guid":{"rendered":"https:\/\/csharptutorial.net\/?page_id=1294"},"modified":"2023-03-31T08:05:40","modified_gmt":"2023-03-31T01:05:40","slug":"csharp-raw-string","status":"publish","type":"page","link":"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-raw-string\/","title":{"rendered":"C# Raw String"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about C# raw string literals that have been introduced in C# 11.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to the C# raw strings<\/h2>\n\n\n\n<p>C# string literals require escaping of special characters and delimiters. Therefore, it&#8217;s difficult to construct literal strings specially for regexes as well as XML and JSON. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> path = <span class=\"hljs-string\">\"C:\\temp\\no.txt\"<\/span>;\r\n\r\nConsole.WriteLine(path);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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>In this example, the <code>\\t<\/code> means tab and <code>\\n<\/code> means new line. It outputs the following to the console:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">C<\/span>:      <span class=\"hljs-selector-tag\">emp<\/span>\r\n<span class=\"hljs-selector-tag\">o<\/span><span class=\"hljs-selector-class\">.txt<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To fix it, you need to use a verbatim string by prefixing the string with the <code>@<\/code> character:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> path = @<span class=\"hljs-string\">\"C:\\temp\\no.txt\"<\/span>;\r\n\r\nConsole.WriteLine(path);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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>Also, if a string contains quotes <code>\"<\/code>, you need to escape it using the <code>\\<\/code> characters. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> response = <span class=\"hljs-string\">\"{ \\\"name\\\": \\\"John Doe\\\"}\"<\/span>;\nConsole.WriteLine(response);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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>The string becomes difficult to read.<\/p>\n\n\n\n<p>C# 11 introduced raw string to overcome the problems. A raw string uses a flexible start and end delimiter to avoid conflict with the contents of the string.<\/p>\n\n\n\n<p>A raw string starts with a minimum of three quotes <code>\"\"\"<\/code> and is optionally followed by a new line, the content of the string, and ends with the same number of quotes.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> json = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"{ \"<\/span>name<span class=\"hljs-string\">\": \"<\/span>John Doe<span class=\"hljs-string\">\"}\"<\/span><span class=\"hljs-string\">\"\"<\/span>;\r\nConsole.WriteLine(json);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{ <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"John Doe\"<\/span>}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If the string itself may use three quotes then the raw string can have longer starting\/ending delimiters, which are four quotes like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">var<\/span> s = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\"<\/span> C<span class=\"hljs-comment\"># raw string uses a minimum of \"\"\"  \"\"\"\";<\/span>\r\nConsole.WriteLine(s);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">C<span class=\"hljs-comment\"># raw string uses a minimum of \"\"\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Multi-line raw string literals<\/h3>\n\n\n\n<p>C# raw string literals support multiline strings. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">var<\/span> json = <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\r\n    { \r\n        \"<\/span>name<span class=\"hljs-string\">\": \"<\/span>John Doe<span class=\"hljs-string\">\",\r\n        \"<\/span>address<span class=\"hljs-string\">\": {\r\n            \"<\/span>home<span class=\"hljs-string\">\": \"<\/span><span class=\"hljs-number\">4000<\/span> N. <span class=\"hljs-number\">1<\/span>st street<span class=\"hljs-string\">\",\r\n            \"<\/span>work<span class=\"hljs-string\">\": \"<\/span><span class=\"hljs-number\">101<\/span> N. <span class=\"hljs-number\">1<\/span>st street<span class=\"hljs-string\">\"\r\n        }\r\n    }\r\n    \"<\/span><span class=\"hljs-string\">\"\"<\/span>;\r\nConsole.WriteLine(json);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\r\n    <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"John Doe\"<\/span>,\r\n    <span class=\"hljs-attr\">\"address\"<\/span>: {\r\n        <span class=\"hljs-attr\">\"home\"<\/span>: <span class=\"hljs-string\">\"4000 N. 1st street\"<\/span>,\r\n        <span class=\"hljs-attr\">\"work\"<\/span>: <span class=\"hljs-string\">\"101 N. 1st street\"<\/span>\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The multi-line raw string literals follow these rules:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The opening and closing quotes of a multi-line raw string literal must be on separate lines.<\/li>\n\n\n\n<li>Any whitespace following the opening quote on the same line is ignored.<\/li>\n\n\n\n<li>Whitespace-only lines following the opening quotes are included in the string literal.<\/li>\n\n\n\n<li>Any whitespace to the left of the closing quotes is removed from all lines of the raw string literal.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"427\" src=\"https:\/\/csharptutorial.net\/wp-content\/uploads\/2023\/03\/csharp-raw-string.png\" alt=\"\" class=\"wp-image-1297\" srcset=\"https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/03\/csharp-raw-string.png 523w, https:\/\/www.csharptutorial.net\/wp-content\/uploads\/2023\/03\/csharp-raw-string-300x245.png 300w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Raw string interpolation <\/h3>\n\n\n\n<p>Raw string literals also support string interpolation that replaces the variables and expressions inside the string with their values.<\/p>\n\n\n\n<p>The following example causes an error because of unexpected <code>{}<\/code> in JSON format:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> name = <span class=\"hljs-string\">\"John Doe\"<\/span>;\r\n<span class=\"hljs-keyword\">var<\/span> json = $<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\" {\"<\/span>Name<span class=\"hljs-string\">\": \"<\/span>{name}<span class=\"hljs-string\">\" } \"<\/span><span class=\"hljs-string\">\"\"<\/span>;\r\n\r\nConsole.WriteLine(json);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><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>To fix this, you need to surround the variable with double opening and closing curly braces <code>{{}}<\/code>. Also, you need to use double <code>$$<\/code> characters:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> name = <span class=\"hljs-string\">\"John Doe\"<\/span>;\r\n<span class=\"hljs-keyword\">var<\/span> json = $$<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\" { \"<\/span>Name<span class=\"hljs-string\">\": \"<\/span>{{name}}<span class=\"hljs-string\">\" } \"<\/span><span class=\"hljs-string\">\"\"<\/span>;\r\n\r\nConsole.WriteLine(json);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><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>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{ <span class=\"hljs-attr\">\"Name\"<\/span>: <span class=\"hljs-string\">\"John Doe\"<\/span> }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use a minimum of opening and closing <code>\"\"\"<\/code> to form a raw string literal.<\/li>\n\n\n\n<li>C# raw string literals support multi-line strings and interpolations.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"1294\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-raw-string\/\"\n\t\t\t\tdata-post-title=\"C# Raw String\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"1294\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-raw-string\/\"\n\t\t\t\tdata-post-title=\"C# Raw String\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you&#8217;ll learn about C# raw string literals that have been introduced in C# 11. Introduction to the C# raw strings C# string literals require escaping of special characters and delimiters. Therefore, it&#8217;s difficult to construct literal strings specially for regexes as well as XML and JSON. For example: In this example, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":7,"menu_order":9,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1294","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/comments?post=1294"}],"version-history":[{"count":4,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1294\/revisions"}],"predecessor-version":[{"id":1299,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/1294\/revisions\/1299"}],"up":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/media?parent=1294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}