معرفی متدهای String در سی شارپ - بخش اول
آموزش سی شارپ

معرفی متدهای String در سی شارپ - بخش اول

رشته ای در سی شارپ دارای امکانات متعددی هستند که به مرور زمان و در طی سال های اخیر این امکانات بهینه تر و بهتر شده اند . ما در این مطلب به تعدادی از این امکانات می پردازیم . همچنین می توانید در معرفی نوع داده ای رشته یا String در سی شارپ در مورد متغییر های رشته ای اطلاعات بیشتری کسب کنید.

همچنین شما می توانید دوره رایگان آموزش مقدماتی سی شارپ رو توی سایت ما مشاهده کنید.

سی شارپ دارای امکانات بسیاری است که در زیر به بخشی از این متد ها و نحوه استفاده از انها می پردازیم:

ToString :

عمل تبدیل را برای ما انجام می دهد و در واقع برای تبدیل هر نوعی در سی شارپ به نوع رشته (string) از ToString استفاده می کنیم.

int a = 1254;
string strResult=a.ToString();

در این مثال ما یک مقدار صحیح از نوع int را به نوع رشته تبدیل کرده ایم .

مثال :

int age=25;
string strAge="Age :" +25 ;

در روش بالا هم همان عملیات تبدیل نوع عددی به رشته انجام شده است . در واقع با استفاده از کاراکتر + ما این عمل تبدیل را انجام داده ایم .

کاربرد کاراکتر $ یا String interpolation :

int age =25;
string strAge=$"Age : {age}";

با استفاده از کاراکتر $ می تواینم به صورت درون خطی عملیات تبدیل رشته را انجام دهیم. هر متغیری که در {} قرار دهید در پس زمینه به رشته تبدیل می شود.

متد Format :

با استفاده از متد فرمت می توانیم قالب بندی رشته های خروجی را مرتب تر کنیم.

string name= "yaser dehghan";
int age=30;
string strMessage = String.Format("my name is {0} and {1} years old !",name,age);

در مثال بالا ما یک عبارت متنی را با استفاده از متد Format ایجاد کرده ایم . 

نکات : 

  • اندیس گذاری ها از 0 شروع می شود و اولین اکولاد {} به صورت پیش فرض اندیس 0 را دارد.
  • ترتیب شماره گذاری ها می تواند جابجا شود یعنی ابتدا اندیس 1 را نمایش دهیم سپس 0 و همینطور به دلخواه خود اندیس ها را بنویسیم.
  • معادل هر اندیس یا آکولاد در سمت راست عبارت یعنی بعد از اوکولاد یک مقدار باید قرار بگیرد.
  • در صورتی که مقادیر سمت راست کمتر از اندیس گذاری ها باشد با خطا مواجه خواهید شد.
string name = "Yaser Dehghan";
 string strName = string.Format("{0}{1}", name);
 Console.WriteLine(strName);

Error Message :
System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

ولی در صورتی که مقادیر سمت راست بیشتر باشد کامپایلر از مقادیر اضافه صرف نظر می کند.

اتصال رشته ها :

با استفاده از کاراکتر + می توان این کار را انجام داد :

string strFirstName = "Yaser";
string strLastName="Dehghan";
console.writeline(strFirstName + strLastName);

اتصال دو رشته با متد Concat :

string str1 = "C# ";
string str2 = "Programming";
string joinedString = string.Concat(str1, str2);
Console.WriteLine("Joined string: " + joinedString);

در مثال بالا دو رشته را با متد Concat بهم متثل کرده ایم . این متد آرایه ای از رشته ها را از ما به عنوان ورودی میگیره و عملیات جوین رشته ها رو انجام می دهد . یعنی هر تعداد رشته دارید به این متد ارسال می کنید و همه رشته ها با هم جوین می شوند.

مقایسه دو رشته با متد Equals :

در سی شارپ با استفده از متد Equals این امکان فراهم شده است تا بتوانید دو رشته را با هم مقایسه کنید .

static void Main(string[] args)
        {
            string str1 = "C# Programming";
            string str2 = "C# Programming";
            string str3 = "Wildcoder.ir";

            // compare str1 and str2
            Boolean result1 = str1.Equals(str2);
            Console.WriteLine("string str1 and str2 are equal: " + result1);

            //compare str1 and str3
            Boolean result2 = str1.Equals(str3);
            Console.WriteLine("string str1 and str3 are equal: " + result2);

        }

خروجی مثال بالا :

string str1 and str2 are equal: True
string str1 and str3 are equal: False

نکته مهم در مورد رشته ها :

رشته های Immutable هستند . یعنی بعد از تعریف یک متغیر از نوع رشته ، مقدار رشته قابل تغییر نیست . عه مگه میشه ؟ من تغییر دادم و شده !!!!!!!!!!!!!🙃

بله همینطور هست از نظر ظاهری تغییر میکنه ولی توی ساختار قضیه کمی متفاوت هست.

ابتدا شما یک متغییر تعریف می کنید به صورت زیر:

string strMessage="Hello ";

در حال حاضر یک خانه حافظه به این متغیر اختصاص داده شده است . حال با استفاده از متد Concat یک عبارت به این متغیر می چسبانید.

string strMessage="Hello ";
strMessage = string.Concat(strMessage , "World");

Output:
Hello World

در ظاهر شما در عمل مقدار متغیر strMessage را تغییر داده اید و خب نتیجه هم همان را نشان میدهد . اما در پس زمینه اتفاقاتی افتاده عجیب:

  • در مرحله اول کامپایلر مقدار متغیر strMessage را میگیرد .
  • با اضافه کردن عبارت World به رشته Hello یک رشته جدید ایجاد می شود.
  • سپس یک شی جدید از نوع string ساخته می شود و رشته Hello world در آن قرار می گیرد.
  • رشته Hello که در ابتدا تعریف کردیم برای جمع اوری و ازاد کردن فضای حافظه قبلی به garbage collection ارسال می شود. چون هیچ متغیر دیگری به ان اختصاص داده نشده است . 

در واقع دو خانه حافظه اختصاص داده می شود هنگام تغییر مقدار رشته و بعد از تغییر رشته ، garbage collection خانه اول حافظه را آزاد میکند و متغیر در خانه جدید آرام میگیرد.

خب تا همینجا داشته باشید مطلب رو ، توی پست بعدی براتون مابقی ماجرا رو شرح میدم.

نویسنده

یاسر دهقان

تاریخ نگارش
7 بهمن 1402
18 مقاله این نویسنده