string name = "Vahid", country = "Iran"; string jsonString = $$""" { "Name": {{name}}, "Country": {{country}} } """; Console.WriteLine(jsonString);
"{\r\n \"Name\": Vahid,\r\n \"Country\": Iran\r\n}"
و یا امکان درج سادهتر عبارات XML، بدون نیاز به escape قسمتی از آن:
string html = """ <body style="normal"> <div class="book-content"> This is information about the "C# 11" book. </body> <footer> This is information about the author of the "C# 11" book. </footer> </element> """;
سؤال: اگر در محتوای Raw String Literal تعریف شده، نیاز به سه عدد " متوالی وجود داشت، چه باید کرد؟
اگر به توضیحات فوق دقت کنید، عنوان شد که شروع و پایان Raw String Literals، با «حداقل» سه عدد " همراه است و به این صورت پیاده سازی میشود:
- اگر رشتهی شما نیاز به سه "" متوالی داشت، باید raw string literal را با حداقل چهار " شروع و خاتمه دهید.
- اگر رشتهی شما نیاز به چهار "" متوالی داشت، باید raw string literal را با حداقل پنج " شروع و خاتمه دهید.
و ... به همین ترتیب برای مابقی حالات.
var text1 = """" Hello World! """ """"; var text2 = """"" Hello World! """" """"";
کاهش فواصل سمت چپ رشتهها، با استفاده از Raw string literals
به مثال زیر که یک قطعه چند سطری SQL را به دو روش قدیم و جدید تعریف میکند، دقت کنید (فواصل سمت چپ در این مثال مهم هستند):
var sql1 = @" SELECT Name FROM Customers WHERE id = @id "; Console.WriteLine(sql1); var sql2 = """ SELECT Name FROM Customers WHERE id = @id """; Console.WriteLine(sql2);
پاسخ: خیر! خروجی نمایشی این دو به صورت زیر است:
SELECT Name FROM Customers WHERE id = @id SELECT Name FROM Customers WHERE id = @id
خروجی واقعی رشتهی sql1 به صورت زیر است:
"\r\n SELECT Name\r\n FROM Customers\r\n WHERE id = @id\r\n "
"SELECT Name\r\nFROM Customers\r\nWHERE id = @id"
استفاده از string interpolation در raw string literals
همیشه عبارات ما از رشتههای ثابت تشکیل نمیشوند. در این بین همواره نیاز به interpolation با مقادیر ثابت و یا متغیرها وجود خواهد داشت. انجام چنین کاری با raw string literals هم میسر است:
var name = "Vahid"; var text = $""" Hello {name1}! Welcome to the Team! """;
سؤال: اگر در این مثال نیاز بود تا از {} جهت مقاصد نمایشی استفاده شود، چه باید کرد؟ یعنی نیاز به درج {} صرفا متنی وجود داشت.
پاسخ: در اینجا تنها کاری را که باید انجام داد، استفاده از یک $ اضافهتر در ابتدای interpolated string است (مانند مثال ابتدای بحث):
var name1 = "Vahid"; var text = $$""" Hello {{{name1}}}! Welcome to the Team! """;
"Hello {Vahid}!\r\n\r\nWelcome to the Team!"
سؤال: اگر در این مثال نیاز بود تا از {{{}}} جهت مقاصد نمایشی استفاده شود، چه باید کرد؟
پاسخ: باید تعداد $های ابتدای رشته را افزایش داد. برای مثال اگر نیاز به درج سه { متوالی است، باید از 4 عدد $ در ابتدای رشته استفاده کرد:
var name4 = "Vahid"; var text4 = $$$$""" Hello {{{{{{{name4}}}}}}}! Welcome to the Team! """;
"Hello {{{Vahid}}}!\r\nWelcome to the Team!"
string name = "Vahid"; var text1 = $"{name}"; var text2 = $"""{name}"""; var text3 = $$"""{{name}}"""; var text4 = $$$"""{{{name}}}"""; var text5 = $$$$"""{{{{name}}}}""";
اما در مثال زیر، تعداد $ها با تعداد {}ها یکی نیست؛ برای مثال اگر از دو $ ابتدایی استفاده شود، ذکر یک جفت تکی {}، تنها به معنای وجود کاراکتری آنها است و همینطور اگر از سه $ ابتدایی استفاده شود، ذکر یک جفت دو تایی {{}}، تنها به معنای وجود کاراکتری آنها است و همینطور الی آخر. اما اگر معادل تعداد $ها، از جفتهای {} استفاده شود، تمام آنها با هم فقط یک interpolation expression delimiter را تشکیل میدهند.
string name = "Vahid"; var text6 = $$"""{name}"""; // = "{name}" var text7 = $$"""{{{name}}}"""; // = "{Vahid}" var text8 = $$$"""{{name}}"""; // = "{{name}}" var text9 = $$$"""{{{{{name}}}}}"""; // = "{{Vahid}}" var text10 = $$$$"""{{{name}}}"""; // = "{{{name}}}" var text11 = $$$$"""{{{{{{{name}}}}}}}"""; // = "{{{Vahid}}}"