Ошибка cs1009 нераспознанная escape последовательность

I have created a site with the following connection string.

I am getting the following error message any help would be really appreciated.

Compiler Error Message: CS1009: Unrecognized escape sequence
Line 21: ad.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";

my codes:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

public partial class html_Show_Projinfo : System.Web.UI.Page
{
    OleDbCommand cmd;
    OleDbConnection con = new OleDbConnection();
    OleDbDataReader rd;
    protected void Page_Load(object sender, EventArgs e)
    {
        int id = Convert.ToInt32(Request.QueryString["id"]);
        con.ConnectionString = ConfigurationManager.ConnectionStrings["pearl"].ToString();
        cmd = new OleDbCommand("Select * from Pearl_Projects where ProjectId=" + id, con);
        con.Open();
        rd = cmd.ExecuteReader();
        string ns;
        while (rd.Read())
        {
            Label2.Text = rd["ProjectName"].ToString();
            ns = rd["Shortdes"].ToString();
            if (ns.Length > 541)
            {
                Label1.Text = ns.Substring(0, 541);
            }
            else
            {
                Label1.Text = ns.Substring(0, ns.Length);
            }            

            Label3.Text = rd["Description"].ToString();
            Label4.Text = rd["location"].ToString();
        }
        rd.Close();
        con.Close();

        //con.Open();
        //cmd = new OleDbCommand("Select ProjectId from Pearl_ProjectDetails where DetailId=" + id, con);
        //int j = Convert.ToInt32(cmd.ExecuteScalar());
        //con.Close();

        //con.Open();
        //cmd = new OleDbCommand("Select ProjectName from Pearl_Projects where ProjectId=" + j, con);
        //Label1.Text = cmd.ExecuteScalar().ToString();
        //con.Close();
        if (Label4.Text == "")
        {
            Label4.Visible = false;
            Label5.Visible = false;
        }
        else
        {
            Label4.Visible = true;
            Label5.Visible = true;
        }
        AccessDataSource ad = new AccessDataSource();
        ad.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";
        ad.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=no Order by ProjectId Desc";
        DataList1.DataSource = ad;
        DataList1.DataBind();

        AccessDataSource ad1 = new AccessDataSource();
        ad1.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";
        ad1.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=yes Order by ProjectId Desc";
        DataList2.DataSource = ad1;
        DataList2.DataBind();
    }
}

ekad's user avatar

ekad

14.4k26 gold badges44 silver badges46 bronze badges

asked Jul 3, 2013 at 19:36

Efe's user avatar

0

escape those \ in lines like the following

ad.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";

you can either manually escape them all like so

ad.DataFile = "D:\\Hosting\\9372580\\html\\pearl\\Pearl.mdb";

or you can make it a literal string

ad.DataFile = @"D:\Hosting\9372580\html\pearl\Pearl.mdb";

the character '\' begins what is called an «Escape Sequence», and it essentially that you’re using 2 characters to represent 1(special) character.

for instance, \n is a newline character, \0 is null, and \\ is \

answered Jul 3, 2013 at 19:38

Sam I am says Reinstate Monica's user avatar

0

answered Jul 3, 2013 at 19:40

AM_Hawk's user avatar

AM_HawkAM_Hawk

6611 gold badge15 silver badges33 bronze badges

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9d389ed9\2c615f86\App_Web_index.cshtml.c114ca27.wbkbq-st.0.cs    Line: 44 

Someone check that yesterday project work fine but today it’s not work. it compile and build without any trouble but doesn’t work.

asked Oct 29, 2013 at 3:14

user2906155's user avatar

3

On line 44: you have 81 backslashes. On lines 45 and 46 you have 80 each. When used in a string literal, the backslash character is used as an «escape» character to indicate things like new-lines and tabs. If you actually want the backslash in your string, you need to specify 2 consecutive backslashes for each backslash desired. Since you have an odd number of backslashes on line 44, you are getting the error.

If you really want that many backslashes, you can disable the escape character in C# by preceding the string literal with an @ like this:

WriteLiteral(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

Alternatively, you can delete one of the backslashes from line 44.

answered Oct 29, 2013 at 3:40

Jim Rhodes's user avatar

Jim RhodesJim Rhodes

5,0214 gold badges25 silver badges38 bronze badges

0

Just use this constructor

new String('\\', 80)

to get a string of 80 backslashes.

answered Oct 29, 2013 at 4:39

Fei Ling's user avatar

Fei LingFei Ling

5924 silver badges2 bronze badges

I got the same thing, it’s auto code, my project is ASP.net with MVC 4, Razor. These code is not keyed in by us. Only getting this error on a new deployment, other deployments of the same code work fine,

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\e22c2559\92c7e946\App_Web__viewstart.cshtml.cdcab7d2.gtokpxja.0.cs    Line: 44 

answered Nov 26, 2014 at 17:59

Bo Flexson's user avatar

Bo FlexsonBo Flexson

4811 gold badge6 silver badges9 bronze badges

The problem here (as mentioned in Bo Flexson’s answer) is with auto-generated code, not physically writing a view with a (large) odd number of slash characters in it.

One solution, described in answer to this question is to simply recompile and redeploy.

For me this didn’t work because the problem appears to have been down to the build order of our large solution. Initially I stumbled upon a solution by making a few minor changes to a separate view in a project deeper in the hierarchy which forced it to rebuild the project with the problematic view properly. Since then I’ve had much more luck rebuilding projects one by one rather than relying on a full solution rebuild to get the order right.

Community's user avatar

answered Apr 15, 2016 at 9:29

T S Taylor's user avatar

T S TaylorT S Taylor

1,5011 gold badge14 silver badges16 bronze badges

igoorrr

0 / 0 / 0

Регистрация: 30.10.2016

Сообщений: 53

1

02.12.2017, 21:57. Показов 11934. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть microsoft sql server 2012 и вижуал студио 2017 выдает ошибку
До этого была ошибка 40

1009	Нераспознанная escape-последовательность

1009	Нераспознанная escape-последовательность

Ошибка CS1009 Нераспознанная escape-последовательность WindowsFormsApp2 C:\Users\Игорь\source\repos\WindowsFormsApp2\WindowsFormsApp2\Form1.cs 23 Активный
код кнопки войти:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection("Data Source=ИГОРЬ-ПК\MYDASE;Initial Catalog=login1;Integrated Security=True") ;
            cn.Open();
            SqlCommand cmd = new SqlCommand($"select *from user1 where username = '{textBox1.Text}', and password = '{textBox2.Text}'", cn);
            SqlDataReader dr;
            dr = cmd.ExecuteReader();
            int count = 0;
            while (dr.Read())
            {
                count += 1;
 
            }
            if (count == 1)
            {
                MessageBox.Show("OK");
                Form2 f2 = new Form2();
                f2.Show();
            }
            else if (count > 0)
            {
                MessageBox.Show("Duplicate username and password");
            }
            else
            {
                MessageBox.Show("username or password is not correct");
            }
            textBox1.Clear();
            textBox2.Clear();
 
 
                
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
 
        }
    }
}

две ночи не могу понять)
Надеюсь на вашу помощь(



0



bbq

214 / 210 / 146

Регистрация: 20.11.2014

Сообщений: 1,161

02.12.2017, 23:11

2

Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

C#
1
"Data Source=ИГОРЬ-ПК\\MYDASE;Initial Catalog=login1;Integrated Security=True"

или

C#
1
@"Data Source=ИГОРЬ-ПК\MYDASE;Initial Catalog=login1;Integrated Security=True"



1



0 / 0 / 0

Регистрация: 30.10.2016

Сообщений: 53

03.12.2017, 09:09

 [ТС]

3

1009	Нераспознанная escape-последовательность



0



bbq

214 / 210 / 146

Регистрация: 20.11.2014

Сообщений: 1,161

03.12.2017, 11:01

4

у Вас есть текст ошибки, вот и ищите в чем проблема. Скорее всего надо так

C#
1
SqlCommand cmd = new SqlCommand($"select *from user1 where username = '{textBox1.Text}', and password = '{textBox2.Text}';", cn);



0



Содержание

  • Строка в C#
  • Создание строк в C#
    • Строки с регулярными и буквальными литералами
  • Неизменяемость строк в C#
  • Итого

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Большое количество задач (если не большинство) при разработке программного обеспечения так или иначе связано с обработкой строк будь то простой вывод в консоль определенных значений, сравнение строк или парсинг текста web-страниц. Так или иначе, даже при первом знакомстве с языком программирования, первое, что мы делаем — это используем строки («Hello world» и т.д.). Именно поэтому умение работы со строками в C#, как и в любом другом языке программирования, является одним из необходимых и важных навыков программиста. В этой и нескольких последующих статьях мы рассмотрим основные возможности работы со строками в C#.

Строки в C# относятся к неизменяемым типам данных и представляют собой объекты класса System.String. Объекты этого класса представляют текст в виде последовательности символов Unicode. То есть, в отличие от Delphi, где есть и UnicodeString и AnsiString и т.д. и т.п, в C# строка — это всегда набор символов Unicode. Однако, при необходимости, никто не мешает нам изменять кодировку символов в строке C# и об этом мы тоже поговорим.

Также, для тех, кто уже имел дело с другими языками программирования, не лишним будет знать, что в конце строки C# нет нуль-символов. Поэтому строка в C# мы можем создавать строки, которые содержат любое количество внедренных нуль-символов (). При этом, максимальный размер объекта String в памяти составляет 2 Гб.

Создание строк в C#

Объявление и создание строк в C# можно осуществить несколькими способами. Рассмотрим основные из них.

string str1; //объявили переменную типа string
str1 = "Привет";//присвоили строке значение
//объявили и создали строку из двух символов 'a'
string str2 = new String('a', 2);
//объявили и создали строку из массива символов
char[] letters = { 'H', 'e', 'l', 'l', 'o' };
string helloString = new string(letters);
//объявили и создали пустую строку
string emptyStr = string.Empty;

В любом из представленных выше примеров мы создаем строку, при этом, в последнем случае, мы создаем пустую строку без символов. Так как строки относятся к ссылочным типам данных, то никто нам не запрещает присвоить строке значение null

string nullStr = null;

хотя, разработчики C# и предупреждают нас о том, что использование string.Empty вместо null предпочтительнее и  снижает вероятность получения исключения типа NullReferenceException.

Строки с регулярными и буквальными литералами

Отдельное внимание при создании строк также стоит уделить такому моменту, как создание строк, содержащих какие-либо служебные символы. Например, если вам необходимо присвоить строке значение, указывающее на путь к файлу: c:Program Filesdotnetdotnet.exe. Если вы попробуете присвоить строке это значение как есть, то ваша программа даже не будет скомпилирована, так как Visual Studio укажет вам на ошибку:

Ошибка CS1009 Нераспознанная escape-последовательность

Все дело в том, что символ обратной косой черты используется в строках для указания так называемых escape-последовательностей и для того, чтобы создать строку, содержащую символ  нам необходимо либо регулярный строковый литерал, либо буквальный литерал, как показано ниже:

//использование регулярного литерала
string path = "c:\Program Files\dotnet\dotnet.exe";
//использование буквального литерала
string path2 = @"c:Program Filesdotnetdotnet.exe";

Использование регулярного литерала позволяет нам использовать различные escape-последовательности в строках. В таблице ниже представлены основные escape-последовательности в C#:

Escape-последовательность Имя символа Кодировка Юникод
Одинарная кавычка 0x0027
» Двойная кавычка 0x0022
\ Обратная косая черта 0x005C
Null 0x0000
a Предупреждение 0x0007
b Backspace 0x0008
f Перевод страницы 0x000C
n Новая строка 0x000A
r Возврат каретки 0x000D
t Горизонтальная табуляция 0x0009
v Вертикальная табуляция 0x000B
u Escape-последовательность Юникода (UTF-16) uHHHH (диапазон: 0000–FFFF; пример: u00E7 = «ç»)
U Escape-последовательность Юникода (UTF-32) U00HHHHHH (диапазон: 000000–10FFFF; пример: U0001F47D = «👽»)
x Escape-последовательность Юникода аналогична «u», она отличается только длиной переменной xH[H][H][H] (диапазон: 0–FFFF; пример: x00E7 или x0E7 или xE7 = «ç»)

Например, используя escape-последовательности, мы можем вывести в консоль таблицу:

//выводим в консоль таблицу 3х3
Console.WriteLine("НомерtЗначениеtОписание");
Console.WriteLine("1t0,1ttописание 1");
Console.WriteLine("2t0,2ttописание 2");
Console.WriteLine("3t0,3ttописание 3");

В итоге, в консоли мы увидим вот такую красивую табличку:

Что касается использования буквального литерала в строках, то его удобно использовать для того, чтобы сделать строки, содержащие какие-либо служебные символы, более читабельными. Согласитесь, что такая строка:

string path2 = @"c:Program Filesdotnetdotnet.exe";

выглядит более читабельной, чем вот такая:

string path = "c:\Program Files\dotnet\dotnet.exe";

Более того, так как буквальный литерал позволяет сохранять все символы в строке как есть, то, используя его, мы можем использовать в наших строках переносы, кавычки и прочие символы как есть, например:

//использование буквального литерала
            string str = @"Эта строка содержит символ  , а также одинарные кавычки 'текст в кавычках' 
                           и переносы строки
                           ";

В результате, в консоли мы увидим следующий текст:

Неизменяемость строк в C#

Как уже упоминалось выше, строки в C# относятся к неизменяемым типам данных. Что это значит для нас? А это значит, что при каждом присвоении значения переменной типа string система вначале освобождает память, занятую строкой, а затем выделяет по новой и только потом записывает новое значение. С одной стороны, подобный подход выглядит нерациональным — лишние освобождения и выделения памяти, но, с другой стороны, таким образом разработчики C# обеспечили максимальную безопасность работы со строками и, надо сказать, сделали это достаточно элегантно и понятно. Например,

string str4; //объявили переменную
str4 = "hello"; //выделили память под 5 символов и присвоили значение переменной
str4 = "hello world";//освободили память, по новой выделили память уже под 11 символов и присвоили новое значение

Также стоит отметить, что когда содержимое двух строк, например, s1 и s2 объединяется для формирования строки, то две исходные строки не изменяются. Например:

string s1 = "Hello ";
string s2 = "world";

s1 += s2;
Console.WriteLine(s1);

В примере выше оператор += создает новую строку, которая содержит объединенное содержимое двух строк. Этот новый объект присваивается переменной s1, а исходный объект, который был присвоен s1, освобождается для сборки мусора, так как ни одна переменная не ссылается на него.

Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Пример:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";
Console.WriteLine(s2);

В представленном примере может показаться, что в итоге, в консоли будет строка "Hello world", однако, на самом деле в консоли мы увидим только "Hello "так как строка s2 остается неизменной.

Итого

Сегодня мы узнали как создавать строки в C#, как использовать различные escape-последовательности в строках, а также использовать буквальный литерал для повышения читабельности строк в C#. Также рассмотрели некоторые моменты, касающиеся неизменности строк в C# и как эта неизменность проявляется.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Содержание

  • Строка в C#
  • Создание строк в C#
    • Строки с регулярными и буквальными литералами
  • Неизменяемость строк в C#
  • Итого

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Большое количество задач (если не большинство) при разработке программного обеспечения так или иначе связано с обработкой строк будь то простой вывод в консоль определенных значений, сравнение строк или парсинг текста web-страниц. Так или иначе, даже при первом знакомстве с языком программирования, первое, что мы делаем — это используем строки («Hello world» и т.д.). Именно поэтому умение работы со строками в C#, как и в любом другом языке программирования, является одним из необходимых и важных навыков программиста. В этой и нескольких последующих статьях мы рассмотрим основные возможности работы со строками в C#.

Строки в C# относятся к неизменяемым типам данных и представляют собой объекты класса System.String. Объекты этого класса представляют текст в виде последовательности символов Unicode. То есть, в отличие от Delphi, где есть и UnicodeString и AnsiString и т.д. и т.п, в C# строка — это всегда набор символов Unicode. Однако, при необходимости, никто не мешает нам изменять кодировку символов в строке C# и об этом мы тоже поговорим.

Также, для тех, кто уже имел дело с другими языками программирования, не лишним будет знать, что в конце строки C# нет нуль-символов. Поэтому строка в C# мы можем создавать строки, которые содержат любое количество внедренных нуль-символов (\0). При этом, максимальный размер объекта String в памяти составляет 2 Гб.

Создание строк в C#

Объявление и создание строк в C# можно осуществить несколькими способами. Рассмотрим основные из них.

string str1; //объявили переменную типа string
str1 = "Привет";//присвоили строке значение
//объявили и создали строку из двух символов 'a'
string str2 = new String('a', 2);
//объявили и создали строку из массива символов
char[] letters = { 'H', 'e', 'l', 'l', 'o' };
string helloString = new string(letters);
//объявили и создали пустую строку
string emptyStr = string.Empty;

В любом из представленных выше примеров мы создаем строку, при этом, в последнем случае, мы создаем пустую строку без символов. Так как строки относятся к ссылочным типам данных, то никто нам не запрещает присвоить строке значение null

string nullStr = null;

хотя, разработчики C# и предупреждают нас о том, что использование string.Empty вместо null предпочтительнее и  снижает вероятность получения исключения типа NullReferenceException.

Строки с регулярными и буквальными литералами

Отдельное внимание при создании строк также стоит уделить такому моменту, как создание строк, содержащих какие-либо служебные символы. Например, если вам необходимо присвоить строке значение, указывающее на путь к файлу: c:\Program Files\dotnet\dotnet.exe. Если вы попробуете присвоить строке это значение как есть, то ваша программа даже не будет скомпилирована, так как Visual Studio укажет вам на ошибку:

Ошибка CS1009 Нераспознанная escape-последовательность

Все дело в том, что символ обратной косой черты \ используется в строках для указания так называемых escape-последовательностей и для того, чтобы создать строку, содержащую символ  \ нам необходимо либо регулярный строковый литерал, либо буквальный литерал, как показано ниже:

//использование регулярного литерала
string path = "c:\\Program Files\\dotnet\\dotnet.exe";
//использование буквального литерала
string path2 = @"c:\Program Files\dotnet\dotnet.exe";

Использование регулярного литерала позволяет нам использовать различные escape-последовательности в строках. В таблице ниже представлены основные escape-последовательности в C#:

Escape-последовательность Имя символа Кодировка Юникод
\’ Одинарная кавычка 0x0027
Двойная кавычка 0x0022
\\ Обратная косая черта 0x005C
\0 Null 0x0000
\a Предупреждение 0x0007
\b Backspace 0x0008
\f Перевод страницы 0x000C
\n Новая строка 0x000A
\r Возврат каретки 0x000D
\t Горизонтальная табуляция 0x0009
\v Вертикальная табуляция 0x000B
\u Escape-последовательность Юникода (UTF-16) \uHHHH (диапазон: 0000–FFFF; пример: \u00E7 = «ç»)
\U Escape-последовательность Юникода (UTF-32) \U00HHHHHH (диапазон: 000000–10FFFF; пример: \U0001F47D = «👽»)
\x Escape-последовательность Юникода аналогична «\u», она отличается только длиной переменной \xH[H][H][H] (диапазон: 0–FFFF; пример: \x00E7 или \x0E7 или \xE7 = «ç»)

Например, используя escape-последовательности, мы можем вывести в консоль таблицу:

//выводим в консоль таблицу 3х3
Console.WriteLine("Номер\tЗначение\tОписание");
Console.WriteLine("1\t0,1\t\tописание 1");
Console.WriteLine("2\t0,2\t\tописание 2");
Console.WriteLine("3\t0,3\t\tописание 3");

В итоге, в консоли мы увидим вот такую красивую табличку:

Что касается использования буквального литерала в строках, то его удобно использовать для того, чтобы сделать строки, содержащие какие-либо служебные символы, более читабельными. Согласитесь, что такая строка:

string path2 = @"c:\Program Files\dotnet\dotnet.exe";

выглядит более читабельной, чем вот такая:

string path = "c:\\Program Files\\dotnet\\dotnet.exe";

Более того, так как буквальный литерал позволяет сохранять все символы в строке как есть, то, используя его, мы можем использовать в наших строках переносы, кавычки и прочие символы как есть, например:

//использование буквального литерала
            string str = @"Эта строка содержит символ \ , а также одинарные кавычки 'текст в кавычках' 
                           и переносы строки
                           ";

В результате, в консоли мы увидим следующий текст:

Неизменяемость строк в C#

Как уже упоминалось выше, строки в C# относятся к неизменяемым типам данных. Что это значит для нас? А это значит, что при каждом присвоении значения переменной типа string система вначале освобождает память, занятую строкой, а затем выделяет по новой и только потом записывает новое значение. С одной стороны, подобный подход выглядит нерациональным — лишние освобождения и выделения памяти, но, с другой стороны, таким образом разработчики C# обеспечили максимальную безопасность работы со строками и, надо сказать, сделали это достаточно элегантно и понятно. Например,

string str4; //объявили переменную
str4 = "hello"; //выделили память под 5 символов и присвоили значение переменной
str4 = "hello world";//освободили память, по новой выделили память уже под 11 символов и присвоили новое значение

Также стоит отметить, что когда содержимое двух строк, например, s1 и s2 объединяется для формирования строки, то две исходные строки не изменяются. Например:

string s1 = "Hello ";
string s2 = "world";

s1 += s2;
Console.WriteLine(s1);

В примере выше оператор += создает новую строку, которая содержит объединенное содержимое двух строк. Этот новый объект присваивается переменной s1, а исходный объект, который был присвоен s1, освобождается для сборки мусора, так как ни одна переменная не ссылается на него.

Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Пример:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";
Console.WriteLine(s2);

В представленном примере может показаться, что в итоге, в консоли будет строка "Hello world", однако, на самом деле в консоли мы увидим только "Hello "так как строка s2 остается неизменной.

Итого

Сегодня мы узнали как создавать строки в C#, как использовать различные escape-последовательности в строках, а также использовать буквальный литерал для повышения читабельности строк в C#. Также рассмотрели некоторые моменты, касающиеся неизменности строк в C# и как эта неизменность проявляется.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Понравилась статья? Поделить с друзьями:
  • Ошибка cs1002 требуется
  • Ошибка cups запрещено astra linux
  • Ошибка cs0234 unity
  • Ошибка cummins spn 633 fmi 31
  • Ошибка cu на x terra 705