راهنمای جامع متدهای TryParse در C# و .NET؛ تبدیل امن رشتهها
خانواده TryParse یکی از مهمترین ابزارهای اعتبارسنجی در C# و .NET است. این متدها تلاش میکنند نمایش متنی را به نوع مقصد تبدیل کنند و نتیجه موفقیت را با bool اعلام نمایند. شکست قالب یا دامنه معمولاً بهجای پرتاب استثنا با false گزارش میشود، بنابراین برای ورودی کاربر، فایل، پارامتر API و تنظیمات انتخابی طبیعی هستند.
این راهنما bool، byte، short، int، long، float، double، decimal، DateTime، Guid و Enum را کنار هم قرار میدهد و در پایان تفاوت TryParse و Parse را روشن میکند. هدف فقط حفظ امضا نیست؛ نوع مناسب، Culture، مرز عدد، معنای null، اعتبار کسبوکار، امنیت و کارایی نیز بررسی میشوند.
قاعده ثابت در تمام نوعها این است که پارامتر out فقط در مسیر موفقیت مصرف شود. مقدار پیشفرض result در شکست یک داده معتبر نیست. برای مثال صفر ممکن است مقدار واقعی باشد، Guid.Empty ممکن است از نظر نحوی معتبر باشد و تاریخ کمینه نیز میتواند بهعنوان sentinel استفاده شده باشد؛ پس bool بازگشتی باید همراه مقدار حفظ شود.
دسترسی سریع به مقالههای تخصصی
هر پیوند زیر به یک مقاله مستقل با ۱۰ مثال کامل، نتیجه نمونه، FAQ و نکات پروژهای میرسد.
مدل ذهنی صحیح برای TryParse
تبدیل ورودی چهار مرحله دارد: نخست قرارداد ظاهری مانند قالب و Culture، سپس تبدیل نحوی، بعد کنترل دامنه نوع و در پایان اعتبار کسبوکار. TryParse عمدتاً دو مرحله میانی را تسهیل میکند و نباید با اعتبارسنجی کامل سیستم اشتباه گرفته شود.
برای داده ماشینی، قالب پایدار و InvariantCulture معمولاً مناسب است. برای ورودی انسانی، فرهنگ انتخابشده کاربر باید بهکار رود. Culture جاری Thread یا سرور تنها زمانی قابل قبول است که صراحتاً بخشی از قرارداد باشد؛ در غیر این صورت مهاجرت محیط میتواند نتیجه را تغییر دهد.
در پردازش انبوه، شکست قابل انتظار با false از ایجاد هزاران exception جلوگیری میکند. overloadهای Span نیز میتوانند تخصیص رشتههای موقت را کاهش دهند. بااینحال کارایی باید با پروفایلر و داده واقعی سنجیده شود و خوانایی فرم ساده نباید قربانی بهینهسازی زودهنگام شود.
مقایسه سریع همه موضوعها
| متد یا موضوع | کاربرد اصلی | سناریوی شاخص | لینک آموزش کامل |
|---|
| bool.TryParse() | تبدیل امن متن به مقدار منطقی | تنظیمات روشن و خاموش، Feature Flag و گزینههای فرم | مشاهده آموزش کامل |
| byte.TryParse() | تبدیل رشته به عدد بدون علامت هشتبیتی | درجه رنگ RGB، درصدهای محدود و بایتهای پروتکل | مشاهده آموزش کامل |
| short.TryParse() | تبدیل رشته به عدد صحیح ۱۶ بیتی | داده حسگر، کدهای کوچک و مقادیر فشرده | مشاهده آموزش کامل |
| int.TryParse() | تبدیل امن رشته به عدد صحیح ۳۲ بیتی | تعداد موجودی، شماره صفحه، سن و شناسههای کوچک | مشاهده آموزش کامل |
| long.TryParse() | تبدیل امن رشته به عدد صحیح ۶۴ بیتی | شناسه تراکنش، اندازه فایل، شمارنده کلان و زمان یونیکس | مشاهده آموزش کامل |
| float.TryParse() | تبدیل رشته به عدد اعشاری تکدقت | گرافیک، داده حسگر و محاسباتی که حافظه مهمتر از دقت مالی است | مشاهده آموزش کامل |
| double.TryParse() | تبدیل رشته به عدد اعشاری دودقت | مختصات جغرافیایی، محاسبات علمی و آمار | مشاهده آموزش کامل |
| decimal.TryParse() | تبدیل دقیق رشته به عدد دهدهی مالی | مبلغ، مالیات، قیمت، مانده حساب و محاسبات تجاری | مشاهده آموزش کامل |
| DateTime.TryParse() | تبدیل امن رشته به تاریخ و زمان | زمان ثبت سفارش، مهلت پرداخت، تاریخ گزارش و ورودی تقویم | مشاهده آموزش کامل |
| Guid.TryParse() | اعتبارسنجی و تبدیل رشته به شناسه GUID | شناسه درخواست، کلید عمومی، Correlation ID و پیوند امن رکوردها | مشاهده آموزش کامل |
| Enum.TryParse() | تبدیل رشته به مقدار Enum | وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینههای محدود دامنه | مشاهده آموزش کامل |
| TryParse و Parse | مقایسه TryParse و Parse در سیشارپ | انتخاب راهبرد تبدیل برای ورودی کاربر، داده داخلی، فایل، API و پردازش انبوه | مشاهده آموزش کامل |
معرفی تکتک متدها و موضوعها
bool.TryParse()؛ تبدیل امن متن به مقدار منطقی
bool.TryParse() برای تنظیمات روشن و خاموش، Feature Flag و گزینههای فرم کاربرد دارد. قرارداد اصلی آن دو مقدار منطقی true و false است. مقادیر 1، 0، yes و no بهصورت مستقیم پذیرفته نمیشوند و باید با قرارداد مشخص نرمال شوند. آموزش کامل bool.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
byte.TryParse()؛ تبدیل رشته به عدد بدون علامت هشتبیتی
byte.TryParse() برای درجه رنگ RGB، درصدهای محدود و بایتهای پروتکل کاربرد دارد. قرارداد اصلی آن از ۰ تا ۲۵۵ است. محدوده کوچک byte باعث میشود ورودی ظاهراً عددی نیز بهعلت سرریز رد شود. آموزش کامل byte.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
short.TryParse()؛ تبدیل رشته به عدد صحیح ۱۶ بیتی
short.TryParse() برای داده حسگر، کدهای کوچک و مقادیر فشرده کاربرد دارد. قرارداد اصلی آن از -۳۲۷۶۸ تا ۳۲۷۶۷ است. اگر احتمال رشد دامنه داده وجود دارد، انتخاب int از تغییر قرارداد ذخیرهسازی در آینده جلوگیری میکند. آموزش کامل short.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
int.TryParse()؛ تبدیل امن رشته به عدد صحیح ۳۲ بیتی
int.TryParse() برای تعداد موجودی، شماره صفحه، سن و شناسههای کوچک کاربرد دارد. قرارداد اصلی آن از -۲۱۴۷۴۸۳۶۴۸ تا ۲۱۴۷۴۸۳۶۴۷ است. برای شناسه یا شمارندهای که ممکن است از حدود دو میلیارد عبور کند، long انتخاب ایمنتری است. آموزش کامل int.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
long.TryParse()؛ تبدیل امن رشته به عدد صحیح ۶۴ بیتی
long.TryParse() برای شناسه تراکنش، اندازه فایل، شمارنده کلان و زمان یونیکس کاربرد دارد. قرارداد اصلی آن از -۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۸ تا ۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۷ است. عدد ۶۴ بیتی دامنه بزرگی دارد، اما برای مبالغ پولی دارای اعشار جای decimal را نمیگیرد. آموزش کامل long.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
float.TryParse()؛ تبدیل رشته به عدد اعشاری تکدقت
float.TryParse() برای گرافیک، داده حسگر و محاسباتی که حافظه مهمتر از دقت مالی است کاربرد دارد. قرارداد اصلی آن تقریباً ±۳٫۴۰۲۸۲۳۵×۱۰^۳۸ با حدود ۶ تا ۹ رقم دقت است. float نمایش دودویی تقریبی دارد؛ برای پول، مالیات و جمعهای حسابداری از decimal استفاده کنید. آموزش کامل float.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
double.TryParse()؛ تبدیل رشته به عدد اعشاری دودقت
double.TryParse() برای مختصات جغرافیایی، محاسبات علمی و آمار کاربرد دارد. قرارداد اصلی آن تقریباً ±۱٫۷۹۷۶۹۳۱۳۴۸۶۲۳۱۵۷×۱۰^۳۰۸ با حدود ۱۵ تا ۱۷ رقم دقت است. double برای علم و مهندسی مناسب است، اما برابری مستقیم مقادیر اعشاری باید با تلورانس انجام شود. آموزش کامل double.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
decimal.TryParse()؛ تبدیل دقیق رشته به عدد دهدهی مالی
decimal.TryParse() برای مبلغ، مالیات، قیمت، مانده حساب و محاسبات تجاری کاربرد دارد. قرارداد اصلی آن تقریباً ±۷٫۹۲۲۸×۱۰^۲۸ با ۲۸ تا ۲۹ رقم معنادار است. فرهنگ و جداکننده اعشار باید صریح باشد؛ تفسیر اشتباه مبلغ یک خطای تجاری جدی است. آموزش کامل decimal.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
DateTime.TryParse()؛ تبدیل امن رشته به تاریخ و زمان
DateTime.TryParse() برای زمان ثبت سفارش، مهلت پرداخت، تاریخ گزارش و ورودی تقویم کاربرد دارد. قرارداد اصلی آن مقادیر معتبر ساختار DateTime همراه با قواعد Culture و DateTimeStyles است. رشتههای تاریخ مبهماند؛ برای قراردادهای ماشینی قالب ISO و برای قالب ثابت TryParseExact مناسبتر است. آموزش کامل DateTime.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
Guid.TryParse()؛ اعتبارسنجی و تبدیل رشته به شناسه GUID
Guid.TryParse() برای شناسه درخواست، کلید عمومی، Correlation ID و پیوند امن رکوردها کاربرد دارد. قرارداد اصلی آن قالبهای متداول D، N، B، P و X برای ساختار ۱۲۸ بیتی Guid است. موفقیت نحوی به معنی مجاز بودن شناسه نیست؛ Guid.Empty و شناسه ناشناخته باید جداگانه کنترل شوند. آموزش کامل Guid.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
Enum.TryParse()؛ تبدیل رشته به مقدار Enum
Enum.TryParse() برای وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینههای محدود دامنه کاربرد دارد. قرارداد اصلی آن نام عضو، مقدار عددی زیرین و ترکیب نامها برای Enumهای Flags است. یک عدد خارج از اعضای تعریفشده ممکن است تبدیل شود؛ پس در ورودی غیرقابلاعتماد Enum.IsDefined یا Allowlist را نیز بررسی کنید. آموزش کامل Enum.TryParse() با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
TryParse و Parse؛ مقایسه TryParse و Parse در سیشارپ
TryParse و Parse برای انتخاب راهبرد تبدیل برای ورودی کاربر، داده داخلی، فایل، API و پردازش انبوه کاربرد دارد. قرارداد اصلی آن دو الگوی تبدیل با قرارداد خطای متفاوت است. TryParse شکست قابل انتظار را بدون استثنا گزارش میکند؛ Parse برای دادهای مناسب است که نامعتبر بودنش واقعاً خطای برنامه محسوب میشود. آموزش کامل TryParse و Parse با مثالهای مستقل جزئیات امضاها، خطاها و کارایی را توضیح میدهد.
طراحی اعتبارسنجی در معماری نرمافزار
در Controller یا Form بهتر است متن خام مستقیماً به Repository نرسد. یک Validator یا Value Object میتواند TryParse، بازه مجاز و پیام خطا را متمرکز کند. این جداسازی باعث میشود UI، API و Import رفتار یکسان داشته باشند و تغییر قرارداد تنها در یک نقطه انجام شود.
در API، خطاهای تبدیل را به پاسخ ساختیافته با نام فیلد، کد خطا و نمونه قالب صحیح تبدیل کنید. در فایل، شماره سطر و علت رد را در گزارش جدا نگه دارید. در هر دو حالت، حذف خاموش داده نامعتبر خطرناک است؛ تعداد رکوردهای ردشده باید بخشی از پایش و گزارش نهایی باشد.
امنیت پس از تبدیل ادامه دارد. عدد معتبر ممکن است خارج از مجوز کاربر باشد، Guid معتبر ممکن است رکورد شخص دیگری را هدف بگیرد و Enum تبدیلشده ممکن است عملیاتی غیرمجاز را درخواست کند. کنترل Authorization، Allowlist، طول ورودی و وجود رکورد وظیفه لایههای بعدی است.
برای تست، ماتریسی از null، خالی، فاصله، Culture متفاوت، کمینه، بیشینه، سرریز، مقدار معتبر ولی غیرمجاز و ورودی حجیم بسازید. تستهای Contract میان تولیدکننده و مصرفکننده داده از بروز اختلاف قالب در محیط عملیاتی جلوگیری میکنند.
شش مثال ترکیبی و کاربردی
مثالهای این بخش نمایی سریع از خانواده متدها میدهند. برای ده مثال اختصاصی هر نوع از پیوند مقاله همان متد استفاده کنید.
مثال شماره 1: خواندن تنظیم منطقی
مقدار قابلیت از تنظیمات دریافت و بدون exception تبدیل میشود. داده نامعتبر بهصورت پیشفرض فعال نمیشود.
using System;
internal static class Program
{
private static void Main()
{
string input = "true";
if (bool.TryParse(input, out bool enabled))
{
Console.WriteLine($"feature={enabled}");
}
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| نتیجه | feature=True |
این نمونه مرز تنظیمات را نشان میدهد. برای مقادیر yes و 1 قرارداد نرمالسازی جدا لازم است.
مثال شماره 2: اعتبارسنجی تعداد کالا
int.TryParse علاوه بر قالب، دامنه int را کنترل میکند و سپس قانون مثبت بودن تعداد اعمال میشود.
using System;
internal static class Program
{
private static void Main()
{
string input = "25";
bool valid = int.TryParse(input, out int quantity) && quantity > 0;
Console.WriteLine($"valid={valid}; quantity={quantity}");
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| اعتبار | True |
| تعداد | 25 |
اعتبار نحوی و تجاری دو مرحلهاند؛ عدد منفی قابل تبدیل است ولی برای تعداد کالا مجاز نیست.
مثال شماره 3: مبلغ با Culture ثابت
برای فایل ماشینی جداکننده اعشار باید مستقل از تنظیم سرور باشد. decimal برای مبلغ انتخاب شده است.
using System;
using Globalization;
internal static class Program
{
private static void Main()
{
string input = "1250.75";
bool ok = decimal.TryParse(input, NumberStyles.Number, CultureInfo.InvariantCulture, out decimal amount);
Console.WriteLine(ok ? amount.ToString("0.00", CultureInfo.InvariantCulture) : "نامعتبر");
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| مبلغ | 1250.75 |
decimal خطای نمایش دودویی float و double را برای محاسبات مالی کاهش میدهد.
مثال شماره 4: زمان ISO و UTC
تاریخ ماشینی با Culture و DateTimeStyles صریح به UTC تبدیل میشود.
using System;
using Globalization;
internal static class Program
{
private static void Main()
{
string input = "2026-07-23T09:30:00Z";
bool ok = DateTime.TryParse(input, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out DateTime date);
Console.WriteLine(ok ? date.ToString("O") : "نامعتبر");
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| زمان | 2026-07-23T09:30:00.0000000Z |
در سامانهای که Offset اصلی مهم است DateTimeOffset را در نظر بگیرید.
مثال شماره 5: شناسه درخواست
Guid مسیر API بررسی میشود و شناسه تهی نیز با قانون دامنه رد میگردد.
using System;
internal static class Program
{
private static void Main()
{
string input = "6f9619ff-8b86-d011-b42d-00c04fc964ff";
bool valid = Guid.TryParse(input, out Guid id) && id != Guid.Empty;
Console.WriteLine(valid);
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| اعتبار | True |
موفقیت تبدیل به معنی وجود رکورد یا داشتن مجوز مشاهده آن نیست.
مثال شماره 6: وضعیت Enum با Allowlist
نام وضعیت بدون حساسیت به حروف تبدیل و سپس تعریفشده بودن عضو بررسی میشود.
using System;
internal static class Program
{
private enum OrderStatus
{
Pending = 1,
Active = 2,
Disabled = 3
}
private static void Main()
{
string input = "active";
bool valid = Enum.TryParse<OrderStatus>(input, true, out OrderStatus status) && Enum.IsDefined(status);
Console.WriteLine($"{valid}/{status}");
}
}
| شاخص خروجی | نتیجه نمونه |
|---|
| خروجی | True/Active |
برای Enumهای Flags باید اعتبار بیتهای ترکیبی با روش مناسب دامنه کنترل شود.
TryParse یا Parse؛ معیار تصمیم
اگر نامعتبر بودن داده بخشی عادی و قابل انتظار از جریان است، TryParse معمولاً انتخاب مناسبتری است. اگر رشته از کد یا پیکربندی داخلی تولید شده و خراب بودنش نشاندهنده باگ است، Parse میتواند با fail-fast مشکل را آشکار کند. استفاده از try/catch برای هزاران خطای قابل انتظار معمولاً هم کندتر و هم پرنویزتر است.
مقاله تخصصی تفاوت TryParse و Parse ده سناریوی عملی شامل null، سرریز، Culture، Guid، تاریخ و پردازش انبوه را مقایسه میکند.
خطاهای رایج در کل خانواده
- مصرف result بدون بررسی bool بازگشتی.
- یکی گرفتن صفر، false یا مقدار تهی با شکست تبدیل.
- اتکا به CurrentCulture محیط بهجای قرارداد داده.
- انتخاب نوع کوچکتر یا تقریبی برای دامنه واقعی.
- فرض اینکه Enum یا Guid قابل تبدیل حتماً از نظر کسبوکار مجاز است.
- حذف خاموش رکورد خراب از گزارش تجمیعی.
- بهکارگیری Parse و exception برای شکست پرتکرار ورودی کاربر.
- استفاده از Span بدون اندازهگیری و پیچیده کردن بیدلیل کد.
سؤالات متداول
پرسش 1: خانواده TryParse دقیقاً چه مسئلهای را حل میکند؟
خانواده TryParse متن را با قرارداد نوع مقصد بررسی میکند و بدون تبدیل شکست قابل انتظار به استثنا، وضعیت موفقیت را برمیگرداند. این ویژگی در ورودی کاربر، فایل، API و تنظیمات ارزشمند است. حوزه رایج این مقاله اعتبارسنجی فرم، API، فایل و داده سازمانی است، اما اعتبار نحوی فقط نخستین مرحله است و قواعد دامنه باید جدا اعمال شوند.
پرسش 2: در صورت شکست خانواده TryParse چه اتفاقی برای result میافتد؟
متد false برمیگرداند و result مقدار پیشفرض نوع را خواهد داشت یا نباید معتبر فرض شود. الگوی درست این است که result فقط در شاخه true مصرف شود. تکیه بر صفر، false، تاریخ کمینه یا Guid.Empty میتواند داده نامعتبر را با یک مقدار واقعی اشتباه بگیرد و خطای خاموش ایجاد کند.
پرسش 3: Culture چه اثری بر خانواده TryParse دارد؟
اثر Culture به نوع بستگی دارد. اعداد اعشاری، جداکننده هزارگان و تاریخ به فرهنگ حساساند، درحالیکه Guid و bool قرارداد محدودتری دارند. در مرزهای ماشینی CultureInfo.InvariantCulture و قالب مستند، و در رابط کاربر فرهنگ انتخابشده کاربر مناسب است. فرهنگ سرور نباید بهطور تصادفی نتیجه را تعیین کند.
پرسش 4: چگونه خانواده TryParse را در نرمافزار تجاری استفاده کنیم؟
یک لایه اعتبارسنجی بسازید که متن خام، نتیجه تبدیل، کد خطا و پیام قابل فهم را برگرداند. سپس قانون کسبوکار مربوط به اعتبارسنجی فرم، API، فایل و داده سازمانی را اعمال کنید. این جداسازی هم تستپذیری را بالا میبرد و هم امکان گزارش کیفیت داده، مشاوره فنی و توسعه سفارشی جریان Import را فراهم میکند.
پرسش 5: آیا جایگزینی بهتر از خانواده TryParse وجود دارد؟
پاسخ به قرارداد ورودی وابسته است. برای قالب ثابت TryParseExact، برای دادهای که خرابی آن باگ است Parse، و برای تبدیلهای سفارشی یک Value Object یا Parser دامنهای مناسبتر است. هدف انتخاب کوتاهترین کد نیست؛ باید خطا، Culture، سازگاری نسخه و پیام کاربر بهروشنی مدیریت شود.
پرسش 6: برای پیادهسازی سازمانی خانواده TryParse چه خدماتی لازم میشود؟
در پروژه بزرگ معمولاً طراحی قرارداد داده، اعتبارسنجی چندلایه، تست مرزی، ثبت خطای امن، داشبورد کیفیت ورودی و پایش لازم است. تیم توسعه یا مشاور میتواند این اجزا را متناسب با معماری C# و .NET، حجم داده و الزامات امنیتی پیاده کند. خود متد کوچک است، اما فرایند قابل اعتماد پیرامون آن اهمیت اصلی را دارد.
پرسش 7: خطای رایج هنگام کار با خانواده TryParse چیست؟
رایجترین خطا استفاده از result بدون بررسی مقدار بازگشتی است. خطاهای دیگر شامل اتکا به Culture جاری، نادیده گرفتن مرز نوع، یکی گرفتن اعتبار نحوی و معنایی و حذف خاموش رکورد نامعتبر است. نکته اختصاصی این موضوع نیز چنین است: نوع مقصد، Culture و اعتبار دامنه باید برای هر ورودی جداگانه مشخص شود.
پرسش 8: کارایی خانواده TryParse در پردازش حجیم چگونه است؟
در شکستهای قابل انتظار، TryParse معمولاً از کنترل جریان با exception مناسبتر است. overloadهای ReadOnlySpan میتوانند تخصیص substring را کاهش دهند. بااینحال نتیجه به نسخه .NET، الگوی داده و مسیر اجرا وابسته است؛ پروفایلر و BenchmarkDotNet باید تصمیم را تأیید کنند و بهینهسازی زودهنگام نباید خوانایی را قربانی کند.
پرسش 9: بهترین روش طراحی با خانواده TryParse چیست؟
قرارداد ورودی را مستند کنید، Culture و Style را در صورت نیاز صریح بدهید، result را فقط پس از true مصرف کنید، اعتبار دامنه را جدا بسنجید و خطا را با پیام قابل اقدام گزارش دهید. برای اعتبارسنجی فرم، API، فایل و داده سازمانی آزمونهای مرزی، null، مقدار نامعتبر، ورودی بسیار بزرگ و سناریوی واقعی کسبوکار را در مجموعه تست قرار دهید.
پرسش 10: خانواده TryParse با کدام نسخههای C# و .NET سازگار است؟
overload پایه string در نسخههای قدیمی .NET نیز در دسترس است، اما overloadهای Span، UTF-8 و رابطهای Generic Math در نسخههای جدیدتر افزوده شدهاند. پروژه باید مستندات Target Framework خود را مبنا قرار دهد. اگر کتابخانه چندهدفه است، API سطح مشترک را انتخاب یا برای نسخههای جدید مسیر بهینه جدا تعریف کنید.
سؤالات مصاحبه
- تفاوت قرارداد خطای خانواده TryParse با Parse را توضیح دهید و برای هر کدام یک سناریو نام ببرید.
- چرا بررسی مقدار بازگشتی قبل از result ضروری است و مقدار پیشفرض چه خطری دارد؟
- اثر Culture، Style یا قالب ورودی بر خانواده TryParse را با یک مثال تشریح کنید.
- اعتبار نحوی و اعتبار کسبوکار در موضوع اعتبارسنجی فرم، API، فایل و داده سازمانی چگونه از هم جدا میشوند؟
- چه زمانی overload مبتنی بر ReadOnlySpan ارزشمند است و چگونه سود آن را اندازه میگیرید؟
جمعبندی و مسیر مطالعه
TryParse یک الگوی واحد برای مرزهای ورودی قابل اعتماد فراهم میکند: تلاش برای تبدیل، اعلام صریح موفقیت و جداسازی شکست قابل انتظار از exception. انتخاب نوع درست، Culture صریح، کنترل دامنه و گزارش خطا این الگو را به راهکاری حرفهای تبدیل میکنند.
برای یادگیری عمیقتر، مقالههای تخصصی زیر را بهترتیب نیاز پروژه مرور کنید.