CSCIENCE

CSCIENCE

سیشارپ - باید دانست 2

يكشنبه, ۳ شهریور ۱۳۹۲، ۰۱:۲۶ ق.ظ
رفتار رشته ها و نحوه ی ساختن یک رشته از اجزای آن

باید دانست که:
رشته ها (string) در سیشارپ از نوع غیر قابل تغییر (immutable) هستند. به این معنا که وقتی یک رشته نسبت داده شد، دیگر نمیتوان محتوای همان خانه از حافظه را با رشته ی جدید تغییر داد و نسبت دهی و یا هرگونه تغییر در رشته ی فعلی، باعث ایجاد رشته ی جدید در خانه ی دیگری از حافظه می شود و در نهایت تنها ارجاع رشته ی قبلی به رشته ی جدید تغییر می یابد.

این نکته از این جهت اهمیت دارد که:
وقتی در حال ساختن یک رشته به صورت پویا هستید (به عنوان مثال می خواهید با استفاده از حلقه تمامی اعضای یک آرایه را در یک رشته جمع آوری کنید) هنگامی که تعداد دفعات تغییر رشته زیاد می شود، بخش زیادی از حافظه برای مدتی توسط رشته های قبلی بلا استفاده می شود (تا هنگامی که garbage collector برسه). سیشارپ برای حل اینگونه مشکلات در رشته ها، شئ دیگری را در اختیارمان قرار داده است. با استفاده از یک StringBuilder ابتدا تمامی اجزا رشته را در این شئ جمع آوری می کنید و سپس متد ToString آن را صدا می زنید.



int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
StringBuilder numbersString = new StringBuilder();
foreach (int in numbers)
{
    numbersString.Append(n);
    numbersString.Append(" - ");
}
string s = numbersString.ToString();


البته لازم نیست هرجا که رشته ای را تغییر می دهید از این روش استفاده کنید. تنها جاهایی استفاده کنید که تعداد تغییرات یک رشته در طول برنامه معلوم می شود و اینکه احتمال می دهید تعداد این تغییرات زیاد خواهد بود. در مثال بالا آرایه را ثابت فرض کردم تا فقط بتوانم نحوه ی استفاده از StringBuilder را نمایش دهم.

راه دیگری که برای حل این مسئله وجود دارد استفاده از امکان Join در LINQ است.
موافقین ۰ مخالفین ۰ ۹۲/۰۶/۰۳
cscience

سیشارپ

C#

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی