رشته ای در سی شارپ دارای امکانات متعددی هستند که به مرور زمان و در طی سال های اخیر این امکانات بهینه تر و بهتر شده اند . ما در این مطلب به تعدادی از این امکانات می پردازیم . همچنین می توانید در معرفی نوع داده ای رشته یا String در سی شارپ در مورد متغییر های رشته ای اطلاعات بیشتری کسب کنید.
همچنین شما می توانید دوره رایگان آموزش مقدماتی سی شارپ رو توی سایت ما مشاهده کنید.
سی شارپ دارای امکانات بسیاری است که در زیر به بخشی از این متد ها و نحوه استفاده از انها می پردازیم:
عمل تبدیل را برای ما انجام می دهد و در واقع برای تبدیل هر نوعی در سی شارپ به نوع رشته (string) از ToString استفاده می کنیم.
int a = 1254;
string strResult=a.ToString();
در این مثال ما یک مقدار صحیح از نوع int را به نوع رشته تبدیل کرده ایم .
مثال :
int age=25;
string strAge="Age :" +25 ;
در روش بالا هم همان عملیات تبدیل نوع عددی به رشته انجام شده است . در واقع با استفاده از کاراکتر + ما این عمل تبدیل را انجام داده ایم .
int age =25;
string strAge=$"Age : {age}";
با استفاده از کاراکتر $ می تواینم به صورت درون خطی عملیات تبدیل رشته را انجام دهیم. هر متغیری که در {} قرار دهید در پس زمینه به رشته تبدیل می شود.
با استفاده از متد فرمت می توانیم قالب بندی رشته های خروجی را مرتب تر کنیم.
string name= "yaser dehghan";
int age=30;
string strMessage = String.Format("my name is {0} and {1} years old !",name,age);
در مثال بالا ما یک عبارت متنی را با استفاده از متد Format ایجاد کرده ایم .
نکات :
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);
string str1 = "C# ";
string str2 = "Programming";
string joinedString = string.Concat(str1, str2);
Console.WriteLine("Joined string: " + joinedString);
در مثال بالا دو رشته را با متد Concat بهم متثل کرده ایم . این متد آرایه ای از رشته ها را از ما به عنوان ورودی میگیره و عملیات جوین رشته ها رو انجام می دهد . یعنی هر تعداد رشته دارید به این متد ارسال می کنید و همه رشته ها با هم جوین می شوند.
در سی شارپ با استفده از متد 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 را تغییر داده اید و خب نتیجه هم همان را نشان میدهد . اما در پس زمینه اتفاقاتی افتاده عجیب:
در واقع دو خانه حافظه اختصاص داده می شود هنگام تغییر مقدار رشته و بعد از تغییر رشته ، garbage collection خانه اول حافظه را آزاد میکند و متغیر در خانه جدید آرام میگیرد.
خب تا همینجا داشته باشید مطلب رو ، توی پست بعدی براتون مابقی ماجرا رو شرح میدم.