تفاوت Convert و Parse در سیشارپ
تفاوت Convert و Parse در سیشارپ بررسی روش تبدیل دادهها، نحوه برخورد با null و خطا و انتخاب روش مناسب برای برنامه.
15 مهر 1405
لینک کوتاه
تفاوت Convert و Parse در سیشارپ
در زبان برنامهنویسی سیشارپ، تبدیل دادهها یکی از کارهای بسیار رایج در هنگام توسعه نرمافزار است.اطلاعاتی که از کاربر دریافت میکنیم، فایلها، دیتابیس، APIها یا منابع دیگر وارد برنامه میشوند، همیشه دقیقاً با نوع دادهای که برنامه به آن نیاز دارد یکسان نیستند.
برای مثال ممکن است یک عدد به صورت string دریافت شود، اما برنامه برای انجام محاسبات به یک مقدار int نیاز داشته باشد.
در چنین شرایطی روشهای مختلفی برای تبدیل داده در سیشارپ وجود دارد.
دو روش مهم و پرکاربرد برای این کار، Convert و Parse هستند.
هر دو میتوانند برای تبدیل رشتهها و دادههای مختلف به انواع دادهای دیگر استفاده شوند،
اما رفتار، کاربرد و نحوه برخورد آنها با مقادیر null و نامعتبر با یکدیگر تفاوت دارد.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
Convert در سیشارپ چیست؟
Convert یک کلاس موجود در فضای نام System است که مجموعهای از متدها را برای تبدیل انواع مختلف دادهها در اختیار برنامهنویس قرار میدهد.برای مثال، اگر بخواهیم یک رشته را به عدد صحیح تبدیل کنیم، میتوانیم از ()Convert.ToInt32 استفاده کنیم:
string number = "100";
int result = Convert.ToInt32(number);
Console.WriteLine(result);
خروجی:
100
در این مثال مقدار "100" که از نوع string است به یک مقدار int تبدیل شده است.
یکی از مزیتهای Convert این است که متدهای مختلفی برای انواع دادههای گوناگون دارد.
برای مثال:
Convert.ToInt32()
Convert.ToInt64()
Convert.ToDouble()
Convert.ToDecimal()
Convert.ToBoolean()
Convert.ToString()
Convert.ToDateTime()
بنابراین Convert فقط برای تبدیل رشته به عدد استفاده نمیشود و میتواند برای تبدیل انواع مختلف داده کاربرد داشته باشد.
Parse در سیشارپ چیست؟
Parse معمولاً به عنوان متدی روی نوع داده مقصد در دسترس است و زمانی استفاده میشود که بخواهیم یک مقدار متنی را به یک نوع مشخص تبدیل کنیم.برای مثال:
string number = "100";
int result = int.Parse(number);
Console.WriteLine(result);
در اینجا نیز خروجی برابر با 100 خواهد بود.
همچنین میتوان برای انواع دیگر از Parse استفاده کرد:
double price = double.Parse("125.50");
decimal amount = decimal.Parse("2500.75");
DateTime date = DateTime.Parse("2026-10-02");
در نتیجه یکی از تفاوتهای مهم این دو روش در نحوه استفاده آنهاست.
در Convert معمولاً از کلاس Convert استفاده میکنیم:
Convert.ToInt32(value);
اما در Parse از متد مربوط به نوع داده مقصد استفاده میشود:int.Parse(value);
تفاوت Convert و Parse در مقدار null
یکی از تفاوتهای مهم Convert و Parse زمانی مشخص میشود که مقدار ورودی null باشد.برای مثال:
string number = null;
int result = Convert.ToInt32(number);
در این حالت Convert برای تبدیل null به int مقدار صفر را برمیگرداند.
اما اگر همین کار را با Parse انجام دهیم:
string number = null;
int result = int.Parse(number);
در این حالت Exception ایجاد میشود، زیرا Parse انتظار دارد مقدار متنی معتبر دریافت کند.
بنابراین اگر احتمال وجود مقدار null وجود داشته باشد، رفتار Convert و Parse متفاوت خواهد بود.
تفاوت در مقدار نامعتبر
فرض کنید کاربر به جای یک عدد، عبارت زیر را وارد کند:abc
اگر بخواهیم آن را به عدد تبدیل کنیم:
int result = int.Parse("abc");
امکان تبدیل وجود ندارد و FormatException رخ میدهد.
Convert نیز در چنین شرایطی نمیتواند یک رشته نامعتبر را به عدد تبدیل کند:
int result = Convert.ToInt32("abc");
این کد نیز با خطای تبدیل مواجه خواهد شد.بنابراین نباید تصور کنیم Convert همیشه از ایجاد Exception جلوگیری میکند.
اگر دادهای از کاربر دریافت میکنیم و احتمال دارد مقدار واردشده نامعتبر باشد، بهتر است از روشهایی مانند TryParse استفاده کنیم.
TryParse چیست؟
TryParse یکی از روشهای بسیار مناسب برای تبدیل دادههایی است که ممکن است نامعتبر باشند.برای مثال:
string input = "100";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("مقدار وارد شده معتبر نیست.");
}
در این روش اگر تبدیل موفق باشد، مقدار true برگردانده میشود و عدد در متغیر number قرار میگیرد.
اگر مقدار نامعتبر باشد، به جای ایجاد Exception، مقدار false دریافت میکنیم.
مثلاً:
string input = "abc";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("لطفاً یک عدد معتبر وارد کنید.");
}
این روش برای ورودیهای کاربر بسیار مناسب است.
چه زمانی از Convert استفاده کنیم؟
Convert زمانی میتواند انتخاب مناسبی باشد که با انواع مختلف داده سروکار داریم و میخواهیم از مجموعه متدهای تبدیل موجود در کلاس Convert استفاده کنیم.برای مثال:
string value = "25";
int number = Convert.ToInt32(value);
double decimalNumber = Convert.ToDouble(value);
همچنین زمانی که مقدار ممکن است null باشد، رفتار Convert در بعضی سناریوها میتواند نسبت به Parse مناسبتر باشد.
برای مثال:
string value = null;
int number = Convert.ToInt32(value);
در این حالت نتیجه برای int برابر صفر خواهد بود.
البته باید توجه داشت که صفر همیشه به معنی مقدار واقعی داده نیست.
بنابراین در طراحی نرمافزار باید بررسی شود که آیا این رفتار برای منطق برنامه مناسب است یا خیر.
چه زمانی از Parse استفاده کنیم؟
Parse زمانی مناسب است که مطمئن باشیم مقدار ورودی باید قابل تبدیل به نوع مقصد باشد.برای مثال اگر یک مقدار عددی معتبر از یک منبع مشخص دریافت میکنیم:
string ageText = "25";
int age = int.Parse(ageText);
در این شرایط Parse ساده و خوانا است.
همچنین زمانی که قصد داریم رشته را به نوع مشخصی مانند int، double، decimal یا DateTime تبدیل کنیم، استفاده از Parse کاملاً رایج است.
اما اگر ورودی از کاربر دریافت شده و احتمال خطا وجود دارد، بهتر است به جای Parse از TryParse استفاده کنیم.
تفاوت Convert ، Parse و TryParse در سی شارپ
میتوان تفاوت این سه روش را به صورت ساده اینگونه بیان کرد:Convert
int number = Convert.ToInt32(value);
برای تبدیل انواع مختلف داده استفاده میشود و در برخی تبدیلها رفتار مشخصی با null دارد.
Parse
int number = int.Parse(value);
برای تبدیل یک مقدار متنی به نوع مشخص استفاده میشود و در صورت نامعتبر بودن مقدار میتواند Exception ایجاد کند.
TryParse
bool success = int.TryParse(value, out int number);
برای زمانی مناسب است که احتمال نامعتبر بودن مقدار وجود دارد و میخواهیم بدون ایجاد Exception نتیجه تبدیل را بررسی کنیم.
مثال کاربردی با ورودی کاربر
فرض کنید میخواهیم سن کاربر را از کنسول دریافت کنیم:Console.Write("سن خود را وارد کنید: ");
string input = Console.ReadLine();
int age = int.Parse(input);
Console.WriteLine($"سن شما {age} سال است.");
این کد در صورتی درست کار میکند که کاربر یک عدد معتبر وارد کند.
اما اگر کاربر بنویسد:
بیست
برنامه با Exception مواجه میشود.
راه بهتر این است که از TryParse استفاده کنیم:
Console.Write("سن خود را وارد کنید: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"سن شما {age} سال است.");
}
else
{
Console.WriteLine("لطفاً سن را به صورت عدد وارد کنید.");
}
این روش باعث میشود برنامه در برابر ورودی نامعتبر مقاومتر باشد.
آیا Convert همیشه بهتر از Parse است؟
خیر. هیچکدام به صورت مطلق بهتر از دیگری نیستند.انتخاب روش مناسب به نوع داده، منبع داده و شرایط برنامه بستگی دارد.
اگر تبدیل ساده و مشخصی دارید، Parse میتواند خوانایی خوبی داشته باشد:
int number = int.Parse("50");
اگر با انواع مختلف داده کار میکنید، Convert امکانات گستردهتری در اختیار شما قرار میدهد:int number = Convert.ToInt32("50");
double value = Convert.ToDouble("50.5");
bool active = Convert.ToBoolean("true");
و اگر ورودی ممکن است نامعتبر باشد، TryParse معمولاً انتخاب مطمئنتری است.
جمعبندی
Convert و Parse هر دو از ابزارهای مهم سیشارپ برای تبدیل دادهها هستند، اما کاربرد یکسانی ندارند.Convert یک کلاس عمومی برای انجام تبدیلهای مختلف است و متدهایی مانند ToInt32، ToDouble، ToDecimal و ToDateTime را ارائه میکند.
در مقابل، Parse معمولاً از طریق نوع مقصد مانند int.Parse یا double.Parse استفاده میشود و برای تبدیل مقدار متنی معتبر به نوع موردنظر کاربرد دارد.
یکی از تفاوتهای مهم آنها نحوه برخورد با null است.
Convert در برخی تبدیلها مانند تبدیل null به int مقدار صفر را برمیگرداند، در حالی که Parse برای ورودی null با Exception مواجه میشود.
همچنین در صورت نامعتبر بودن مقدار، هر دو روش میتوانند Exception ایجاد کنند.
به همین دلیل برای اطلاعاتی که مستقیماً از کاربر دریافت میشوند، استفاده از TryParse معمولاً گزینه مناسبتری است.
به طور خلاصه:
Convert → تبدیل عمومی انواع مختلف داده
Parse → تبدیل مقدار متنی معتبر به یک نوع مشخص
TryParse → تبدیل امنتر دادههای احتمالی نامعتبر
شناخت تفاوت این سه روش باعث میشود کدهای سیشارپ خواناتر، قابلاعتمادتر و مقاومتر در برابر خطاهای ورودی نوشته شوند.




کاربران ما
شما هم نظرتون با ما دریاره “تفاوت Convert و Parse در سیشارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید