آموزش int.Parse() در C# و .NET با ۱۰ مثال عملی

آموزش کامل int.Parse() در C# و .NET؛ مثال، خطا و Performance

توسط admin | گروه SQL Server | 1405/05/01

نظرات 0

آموزش کامل int.Parse() در C# و .NET

مقدمه

int.Parse() یکی از ابزارهای مستقیم تبدیل متن در پلتفرم Microsoft .NET است. این API در حوزه‌هایی مانند شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح کاربرد دارد. هدف آن این است که نمایش متنی معتبر را به نوع مقصد تبدیل کند و در صورت نقض قرارداد، شکست را با استثنا اعلام نماید.

در این راهنما تبدیل متن به عدد صحیح سی‌ودوبیتی را از سطح پایه تا طراحی حرفه‌ای بررسی می‌کنیم. تفاوت اعتبار نحوی و اعتبار کسب‌وکار، رفتار مقدار null، اثر CultureInfo، مدیریت خطا، کارایی و انتخاب میان Parse و TryParse با مثال‌های کامل توضیح داده می‌شود.

اگر به نمای کلی خانواده تبدیل‌ها و مسیر یادگیری همه نوع‌ها نیاز دارید، راهنمای جامع متدهای Parse در C# و .NET را نیز مطالعه کنید. لینک‌های این مجموعه مستقل از دامنه ساخته شده‌اند تا پس از جابه‌جایی وب‌سایت هم سالم بمانند.

1int.ParseC# Parse

تصویر 1: int.Parse()؛ نمای مفهومی مسیر متن تا مقدار نوع‌دار

تعریف، Syntax و قرارداد متد

در ساده‌ترین حالت، int.Parse() یک رشته را دریافت می‌کند و مقدار int تحویل می‌دهد. محدوده یا قالب اصلی این نوع عبارت است از: از ‎-2147483648 تا 2147483647. موفقیت تبدیل فقط درست‌بودن قالب را ثابت می‌کند؛ قواعد دامنه مانند مثبت‌بودن مبلغ یا تعریف‌شدن مقدار Enum باید جداگانه کنترل شوند.

Syntax پایه و قابل اجرا

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "145000";
            int value = int.Parse(text);
            Console.WriteLine(value);
        }
    }

پارامترها و نوع خروجی

  • پارامتر اصلی، متن ورودی است و نباید بدون قرارداد مشخص از لایه نمایش به هسته دامنه عبور کند.
  • برخی overloadها فرهنگ، NumberStyles، DateTimeStyles، قالب یا گزینه ignoreCase دریافت می‌کنند.
  • نوع خروجی در این مقاله int است؛ در شکست، Parse معمولاً FormatException، ArgumentException یا OverflowException ایجاد می‌کند.
  • مقدار null بسته به نوع و overload می‌تواند ArgumentNullException ایجاد کند؛ بنابراین سیاست null باید پیش از تبدیل روشن باشد.

Parse را باید به چشم یک مرز قرارداد دید. وقتی برنامه ادعا می‌کند متن حتماً معتبر است، شکست Parse وجود یک خطای داده یا برنامه‌نویسی را آشکار می‌کند. وقتی نامعتبر بودن قابل انتظار است، TryParse مدل مناسب‌تری برای کنترل جریان خواهد بود.

مثال‌های عملی مستقل

مثال‌ها از تبدیل پایه شروع می‌شوند و به داده دسته‌ای، null، مقدار مرزی، خطای کنترل‌شده و مسیر بهینه می‌رسند. هر نمونه یک برنامه کامل کنسولی است و خروجی نمایشی اجازه می‌دهد نتیجه را بدون اجرای فوری کد بررسی کنید.

مثال 1: تبدیل تعداد کالا

در سناریوی «تبدیل تعداد کالا»، int.Parse() یک رشته معتبر را به مقدار نوع‌دار تبدیل می‌کند تا ادامه برنامه با داده خام درگیر نباشد.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "145000";
            int value = int.Parse(text);
            Console.WriteLine(value);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000145000تبدیل تعداد کالا

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 2: پاک‌سازی شماره صفحه

برای «پاک‌سازی شماره صفحه»، فاصله یا شکل نمایش ورودی آگاهانه مدیریت می‌شود و قرارداد تبدیل روشن باقی می‌ماند.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "  145000  ";
            int value = int.Parse(text.Trim());
            Console.WriteLine(value);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000145000پاک‌سازی شماره صفحه

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 3: پردازش شمارنده‌های روزانه

نمونه «پردازش شمارنده‌های روزانه» چند مقدار مستقل را پردازش می‌کند و کاربرد این نوع را در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح نشان می‌دهد.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string[] values = { "145000", "145000", "145000" };
            int parsedCount = 0;
            foreach (string text in values)
            {
                _ = int.Parse(text);
                parsedCount++;
            }
            Console.WriteLine($"ParsedCount={parsedCount}");
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000ParsedCount=3پردازش شمارنده‌های روزانه

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 4: کنترل شناسه مثبت

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

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "145000";
            int value = int.Parse(text);
            if (value > 0)
            {
                Console.WriteLine("Positive");
            }
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000Positiveکنترل شناسه مثبت

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 5: مشاهده Int32 در Runtime

مثال «مشاهده Int32 در Runtime» ثابت می‌کند خروجی فقط یک متن تغییرشکل‌یافته نیست و Runtime نوع واقعی مقصد را ایجاد کرده است.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "145000";
            int value = int.Parse(text);
            Console.WriteLine($"Value={value}; Type={value.GetType().Name}");
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000Value=145000; Type=Int32مشاهده Int32 در Runtime

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 6: سیاست مقدار مفقود فرم

در «سیاست مقدار مفقود فرم»، چون Parse برای null قرارداد موفقی ندارد، سیاست مقدار پیش‌فرض پیش از فراخوانی اعمال می‌شود.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string? text = null;
            int value = text is null ? default : int.Parse(text);
            Console.WriteLine(value);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
1450000سیاست مقدار مفقود فرم

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 7: آزمون بیشینه Int32

آزمون «آزمون بیشینه Int32» کران مهم نوع مقصد را می‌سنجد؛ محدوده این مقاله از ‎-2147483648 تا 2147483647 است.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "2147483647";
            int value = int.Parse(text);
            Console.WriteLine(value == int.MaxValue);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000Trueآزمون بیشینه Int32

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 8: پذیرش مقدار سفارش

سناریوی «پذیرش مقدار سفارش» به یک کاربرد پروژه‌ای در حوزه شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح نزدیک است و مقدار تبدیل‌شده را وارد منطق کسب‌وکار می‌کند.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string quantityText = "145000";
            int quantity = int.Parse(quantityText);
            Console.WriteLine($"Accepted={quantity > 0}; Value={quantity}");
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000Accepted=True; Value=145000پذیرش مقدار سفارش

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 9: تفکیک Format و Overflow

در «تفکیک Format و Overflow»، FormatException یا OverflowException فقط در مرزی مدیریت می‌شود که امکان ارائه پیام اصلاحی وجود دارد.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "not-a-number";
            try
            {
                _ = int.Parse(text);
            }
            catch (Exception ex) when (ex is FormatException || ex is OverflowException)
            {
                Console.WriteLine(ex.GetType().Name);
            }
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000FormatException یا OverflowExceptionتفکیک Format و Overflow

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

مثال 10: اعتبارسنجی سریع پارامتر API

نمونه «اعتبارسنجی سریع پارامتر API» از TryParse استفاده می‌کند تا شکست عادی بدون ساخت استثنا گزارش شود و مسیر پرترافیک خوانا بماند.

using System;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "145000";
            if (int.TryParse(text, out int value))
            {
                Console.WriteLine(value);
            }
        }
    }
ورودی یا سناریوخروجی نمونهنکته
145000145000اعتبارسنجی سریع پارامتر API

کاربرد عملی این الگو در شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح دیده می‌شود. در نسخه تولیدی، پیام خطا، ثبت رخداد، حریم خصوصی داده و تست واحد را متناسب با قرارداد سامانه تکمیل کنید.

2int.ParseC# Parse

تصویر 2: int.Parse()؛ مقایسه مسیر موفق، شکست و اعتبارسنجی

خطاهای رایج و روش اصلاح

بیشتر ایرادهای تبدیل از خود API ناشی نمی‌شوند؛ منشأ آن‌ها قرارداد مبهم ورودی است. مشخص نبودن Culture، اعتماد به متن کاربر، نادیده‌گرفتن محدوده نوع و استفاده از استثنا برای کنترل جریان، رفتار سامانه را غیرقابل پیش‌بینی می‌کند.

  • فراخوانی Parse روی null یا رشته خالی؛ ابتدا سیاست مقدار اجباری، مقدار پیش‌فرض یا رد درخواست را تعیین کنید.
  • تکیه بر Culture جاری سرور؛ برای داده بین‌سامانه‌ای از CultureInfo.InvariantCulture یا قالب دقیق استفاده کنید.
  • فرض اینکه موفقیت تبدیل یعنی اعتبار کسب‌وکار؛ محدوده، موجودیت و قواعد دامنه را پس از تبدیل بسنجید.
  • گرفتن catch کلی و ادامه خاموش برنامه؛ فقط خطای قابل بازیابی را بگیرید و اطلاعات تشخیصی مناسب ثبت کنید.
  • تبدیل چندباره همان متن در لایه‌های مختلف؛ یک بار در مرز تبدیل کنید و مقدار نوع‌دار را به داخل بفرستید.
  • قرار دادن Parse در حلقه‌ای با نرخ خطای بالا؛ در این مسیر از TryParse و پردازش نتیجه bool استفاده کنید.

کارایی، حافظه و رفتار سیستمی

برای ورودی معتبر، int.Parse() معمولاً عملیات کوتاهی است و مقدار مقصد را بدون نیاز به منطق پیچیده تولید می‌کند. با این حال هزینه واقعی به طول متن، فرهنگ، سبک عدد، نوع مقصد، نسخه Runtime، معماری CPU و نرخ شکست وابسته است.

تفاوت بزرگ زمانی دیده می‌شود که ورودی نامعتبر پرتکرار باشد. Parse برای گزارش شکست یک Exception می‌سازد و پرتاب می‌کند؛ این مسیر علاوه بر CPU می‌تواند تخصیص حافظه و فشار جمع‌آوری زباله ایجاد کند. TryParse شکست را با false برمی‌گرداند و برای داده کاربر یا فایل حجیم مناسب‌تر است.

در مسیرهای بسیار داغ، overloadهای مبتنی بر ReadOnlySpan می‌توانند از ساخت Substring جلوگیری کنند. این به معنی سریع‌تر بودن قطعی در هر پروژه نیست؛ آزمون باید در Release، بدون Debugger، پس از Warm-up و با داده‌ای شبیه تولید انجام شود. BenchmarkDotNet برای مقایسه علمی گزینه مطمئن‌تری است.

بهترین روش‌ها

  • نوع مقصد را بر اساس دامنه انتخاب کنید، نه صرفاً بر اساس اینکه نمونه فعلی در آن جا می‌شود.
  • قالب، Culture و سیاست null را بخشی از قرارداد API یا فایل بدانید.
  • برای داده تضمین‌شده Parse و برای شکست قابل انتظار TryParse را انتخاب کنید.
  • پیام خطای فارسی و قابل اقدام بسازید، اما داده محرمانه را در Log تکرار نکنید.
  • پس از تبدیل، اعتبار دامنه‌ای مانند محدوده مجاز و وجود شناسه را جداگانه کنترل کنید.
  • حالت‌های حداقل، حداکثر، صفر، منفی، فاصله، حروف و قالب ناسازگار را تست کنید.
  • در حلقه داغ، تبدیل و ساخت CultureInfo یا Regex تکراری را حذف کنید.
  • تصمیم کارایی را با پروفایل و Benchmark روی نسخه واقعی .NET تأیید کنید.

کاربرد واقعی در معماری نرم‌افزار

در سامانه سازمانی، int.Parse() بهتر است در لایه ورودی، Mapper یا Value Object قرار گیرد. رشته خام مربوط به شناسه‌ها، شمارنده‌ها، تعداد کالا، شماره صفحه و اغلب ورودی‌های عدد صحیح پس از اعتبارسنجی به مقدار نوع‌دار تبدیل می‌شود و لایه دامنه دیگر درگیر جزئیات نمایش متن نیست.

این الگو تست‌پذیری را افزایش می‌دهد، پیام‌های خطا را یکپارچه می‌کند و مانع پخش‌شدن منطق تبدیل در Controller، فرم و Repository می‌شود. برای پروژه‌های بزرگ می‌توان نتیجه تبدیل را در یک Result type قرار داد تا خطا بدون Exception به لایه نمایش برگردد.

سؤالات متداول

۱. int.Parse() دقیقاً چه کاری انجام می‌دهد؟

int.Parse() نمایش متنی معتبر را مطابق قواعد نوع مقصد به یک مقدار نوع‌دار تبدیل می‌کند. نتیجه پس از تبدیل می‌تواند در محاسبه، شرط، ذخیره‌سازی یا منطق دامنه استفاده شود و دیگر لازم نیست با رشته خام کار کنیم.

۲. چه زمانی استفاده از int.Parse() برای تازه‌کاران مناسب است؟

وقتی منبع داده مورد اعتماد است، قالب از قبل اعتبارسنجی شده و شکست واقعاً یک وضعیت استثنایی محسوب می‌شود، Parse انتخابی ساده و خواناست. برای ورودی مستقیم کاربر معمولاً TryParse تجربه مقاوم‌تری ایجاد می‌کند.

۳. آیا استفاده درست از int.Parse() هزینه نگهداری پروژه را کم می‌کند؟

بله؛ تبدیل در مرز سیستم و انتقال مقدار نوع‌دار به لایه‌های داخلی، شرط‌های تکراری و خطاهای پنهان را کاهش می‌دهد. این جداسازی در پروژه‌های تجاری، گزارش‌گیری و سامانه‌های چندلایه ارزش زیادی دارد.

۴. در پروژه سفارشی چگونه سیاست تبدیل int.Parse() طراحی می‌شود؟

قالب ورودی، فرهنگ، رفتار null، محدوده مجاز، پیام خطا و محل ثبت رخداد باید در قرارداد ورودی مشخص شوند. سپس تبدیل در یک نقطه مشترک مانند Validator، Mapper یا لایه ورودی پیاده‌سازی و با تست پوشش داده می‌شود.

۵. تفاوت کلیدی Parse و TryParse برای int.Parse() چیست؟

Parse در شکست استثنا پرتاب می‌کند، ولی TryParse با یک مقدار bool موفقیت را گزارش می‌دهد و خروجی را از پارامتر out تحویل می‌دهد. تفاوت اصلی در قرارداد شکست است، نه صرفاً شکل نوشتن کد.

۶. برای پیاده‌سازی حرفه‌ای int.Parse() چه خدماتی لازم می‌شود؟

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

۷. خطاهای رایج int.Parse() کدام‌اند؟

ارسال null، رشته خالی، قالب ناسازگار، عدد خارج از محدوده، فرهنگ اشتباه و گرفتن کلی همه Exceptionها از خطاهای پرتکرار هستند. ثبت مقدار حساس نیز باید با قواعد امنیت و حریم خصوصی هماهنگ شود.

۸. آیا int.Parse() از نظر Performance کند است؟

روی ورودی معتبر معمولاً تبدیل سریع است؛ مشکل اصلی زمانی رخ می‌دهد که داده نامعتبر زیاد باشد و Parse مرتب استثنا بسازد. اندازه‌گیری با داده واقعی، Release build، Runtime هدف و ابزار مناسب از حدس بهتر است.

۹. بهترین روش استفاده از int.Parse() چیست؟

فرهنگ و قالب را صریح کنید، تبدیل را در مرز ورودی نگه دارید، دامنه مجاز را جداگانه بسنجید، از تبدیل تکراری جلوگیری کنید و برای تمام کران‌ها تست داشته باشید. شکست قابل انتظار را نیز با TryParse مدل کنید.

۱۰. int.Parse() با کدام نسخه‌های C# و .NET سازگار است؟

شکل‌های پایه Parse سال‌هاست در .NET وجود دارند، اما overloadهای Generic، Span و رابط‌های جدید مانند IParsable به نسخه Runtime وابسته‌اند. پیش از استفاده از overload جدید، Target Framework پروژه و مستندات همان نسخه را کنترل کنید.

سؤالات مصاحبه

سؤالمحور پاسخ حرفه‌ای
چه زمانی int.Parse() را به TryParse ترجیح می‌دهید؟قرارداد قطعی ورودی و استثنایی‌بودن واقعی شکست
چرا CultureInfo روی تبدیل مهم است؟جداکننده، قالب، زبان و پایداری داده بین‌سامانه‌ای
موفقیت Parse چه چیزی را تضمین نمی‌کند؟اعتبار دامنه، مجوز، موجودیت و منطق کسب‌وکار
استثنا در حلقه داغ چه اثری دارد؟هزینه CPU، تخصیص و پیچیدگی مسیر کنترل
Span چه زمانی مفید است؟حذف برش رشته و کاهش تخصیص در پردازش حجیم

چک‌لیست نهایی

  • نوع مقصد و محدوده آن با دامنه هماهنگ است.
  • قالب و Culture ورودی مستند شده است.
  • رفتار null و رشته خالی مشخص است.
  • Parse یا TryParse بر اساس قرارداد شکست انتخاب شده است.
  • اعتبار نحوی و اعتبار کسب‌وکار جدا هستند.
  • مقادیر مرزی و نامعتبر تست شده‌اند.
  • در مسیر پرترافیک اندازه‌گیری واقعی انجام شده است.
  • پیام خطا مفید است و اطلاعات حساس را افشا نمی‌کند.
3int.ParseC# Parse

تصویر 3: int.Parse()؛ چک‌لیست انتخاب API و آماده‌سازی برای تولید

جمع‌بندی

int.Parse() زمانی بهترین انتخاب است که متن مطابق قراردادی قطعی و معتبر وارد شود و شکست باید یک وضعیت استثنایی باشد. برای ورودی نامطمئن، TryParse کنترل صریح‌تر و معمولاً رفتار کاراتری در مسیر شکست ارائه می‌کند. انتخاب نوع، فرهنگ، تست مرزی و محل تبدیل به اندازه خود فراخوانی متد اهمیت دارند.

برای مقایسه این API با سایر تبدیل‌ها، راهنمای جامع متدهای Parse در C# و .NET را ببینید. این راهنما نقشه کامل bool، انواع عددی، DateTime، Guid، Enum و تحلیل کارایی را یکجا ارائه می‌کند.

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر