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

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

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

نظرات 0

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

مقدمه

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

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

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

1float.ParseC# Parse

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

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

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

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

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

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

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

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

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

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

مثال 1: تبدیل مقدار حسگر

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "23.75";
            float value = float.Parse(text, System.Globalization.CultureInfo.InvariantCulture);
            Console.WriteLine(value.ToString(System.Globalization.CultureInfo.InvariantCulture));
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.7523.75تبدیل مقدار حسگر

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

مثال 2: پاک‌سازی مؤلفه مختصات

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "  23.75  ";
            float value = float.Parse(text.Trim(), System.Globalization.CultureInfo.InvariantCulture);
            Console.WriteLine(value.ToString(System.Globalization.CultureInfo.InvariantCulture));
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.7523.75پاک‌سازی مؤلفه مختصات

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

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

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

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

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

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

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

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

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

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

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

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

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

مثال 6: مقدار پیش‌فرض داده حسگر

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string? text = null;
            float value = text is null ? default : float.Parse(text, System.Globalization.CultureInfo.InvariantCulture);
            Console.WriteLine(value);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.750مقدار پیش‌فرض داده حسگر

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

مثال 7: آزمون بیشینه تقریبی float

آزمون «آزمون بیشینه تقریبی float» کران مهم نوع مقصد را می‌سنجد؛ محدوده این مقاله ممیز شناور 32 بیتی با حدود 7 رقم دقت است.

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "3.4028235E+38";
            float value = float.Parse(text, System.Globalization.CultureInfo.InvariantCulture);
            Console.WriteLine(value == float.MaxValue);
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.75Trueآزمون بیشینه تقریبی float

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

مثال 8: پذیرش وزن مدل سبک

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string quantityText = "23.75";
            float quantity = float.Parse(quantityText, System.Globalization.CultureInfo.InvariantCulture);
            Console.WriteLine($"Accepted={quantity > 0}; Value={quantity}");
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.75Accepted=True; Value=23.75پذیرش وزن مدل سبک

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

مثال 9: مدیریت مقدار اعشاری خراب

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "not-a-number";
            try
            {
                _ = float.Parse(text, System.Globalization.CultureInfo.InvariantCulture);
            }
            catch (Exception ex) when (ex is FormatException || ex is OverflowException)
            {
                Console.WriteLine(ex.GetType().Name);
            }
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.75FormatException یا OverflowExceptionمدیریت مقدار اعشاری خراب

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

مثال 10: پردازش کم‌هزینه فریم‌ها

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

using System;
    using System.Globalization;
    
    public static class Program
    {
        public static void Main()
        {
            string text = "23.75";
            if (float.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out float value))
            {
                Console.WriteLine(value);
            }
        }
    }
ورودی یا سناریوخروجی نمونهنکته
23.7523.75پردازش کم‌هزینه فریم‌ها

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

2float.ParseC# Parse

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

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

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

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

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

برای ورودی معتبر، float.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 تأیید کنید.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

جمع‌بندی

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

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

 

0 نظر

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

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

حرف 500 حداکثر