فصل 4 از 40 درس 1 از 1

تبدیل انواع داده

تبدیل انواع داده

بخشی از آموزش جامع C# و .NET 10

محتوای درس تبدیل انواع داده

در برنامه‌های واقعی داده‌ها دائماً میان نمایش‌های مختلف جابه‌جا می‌شوند. تفاوت میان تبدیل ضمنی، تبدیل صریح و Parsing برای جلوگیری از خطا و از دست رفتن داده ضروری است.

۱. Implicit Conversion

زمانی که تبدیل بدون از دست رفتن دامنه مقدار ممکن باشد، کامپایلر می‌تواند تبدیل را به‌صورت ضمنی انجام دهد؛ مانند int به long.

مثال

int count = 100;
         long large = count;
         double value = count;
         Console.WriteLine(value);

در این مثال، مفهوم «Implicit Conversion» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. Explicit Casting

تبدیل‌هایی که احتمال از دست رفتن داده دارند باید صریح باشند. Casting مسئولیت کنترل نتیجه را بر عهده کد قرار می‌دهد.

مثال

double value = 19.9;
         int whole = (int)value;
         Console.WriteLine(whole);

در این مثال، مفهوم «Explicit Casting» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. Convert

کلاس Convert مجموعه‌ای از تبدیل‌های متداول را ارائه می‌کند و رفتار مشخصی برای null و Typeهای پایه دارد.

مثال

string input = "42";
         int number = Convert.ToInt32(input);
         Console.WriteLine(number * 2);

در این مثال، مفهوم «Convert» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Parse و TryParse

Parse برای متن معتبر مناسب است و در ورودی نامعتبر Exception ایجاد می‌کند. TryParse برای ورودی خارجی انتخاب امن‌تری است زیرا بدون Exception نتیجه موفقیت را برمی‌گرداند.

مثال

if (int.TryParse("125", out int value))
             Console.WriteLine(value + 1);

در این مثال، مفهوم «Parse و TryParse» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. Overflow

در تبدیل عددی، checked می‌تواند Overflow را به Exception تبدیل کند و از عبور خاموش مقدار جلوگیری کند.

مثال

try { int x = checked(int.MaxValue + 1); }
         catch (OverflowException) { Console.WriteLine("Overflow"); }

در این مثال، مفهوم «Overflow» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

int count = 120;
         long total = count;
         
         double value = 19.95;
         int roundedDown = (int)value;

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

Console.Write("Age: ");
         string? input = Console.ReadLine();
         
         if (int.TryParse(input, out int age))
         {
             Console.WriteLine($"Age = {age}");
         }
         else
         {
             Console.WriteLine("Invalid number");
         }

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• استفاده از Parse برای ورودی غیرقابل اعتماد

• نادیده گرفتن قسمت اعشاری هنگام Cast به int

• تبدیل‌های زنجیره‌ای غیرضروری که خوانایی را کاهش می‌دهند

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

برنامه‌ای بنویسید که قیمت و تعداد را به‌صورت متن دریافت کند، با TryParse اعتبارسنجی کند و مبلغ کل را محاسبه کند.

۱۰. جمع‌بندی

در این فصل، مبانی «تبدیل انواع داده» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.