آموزش جامع Enum.TryParse() در C# و .NET با مثال‌های عملی | راهنمای تخصصی C# و .NET

آموزش جامع Enum.TryParse() در C# و .NET با مثال‌های عملی

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

نظرات 0

آموزش جامع Enum.TryParse() در C# و .NET با مثال‌های عملی

بازگشت به راهنمای جامع متدهای TryParse در سی‌شارپ؛ این مقاله به‌صورت مستقل تمام جنبه‌های Enum.TryParse() را از سطح مقدماتی تا نکات حرفه‌ای بررسی می‌کند.

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

دامنه یا قرارداد اصلی این نوع نام عضو، مقدار عددی زیرین و ترکیب نام‌ها برای Enumهای Flags است. یک عدد خارج از اعضای تعریف‌شده ممکن است تبدیل شود؛ پس در ورودی غیرقابل‌اعتماد Enum.IsDefined یا Allowlist را نیز بررسی کنید. به همین دلیل نتیجه true صرفاً موفقیت تبدیل نحوی را نشان می‌دهد و مجاز بودن مقدار برای عملیات جاری باید در مرحله بعد بررسی شود.

قاعده کلیدی: مقدار result را فقط زمانی مصرف کنید که مقدار بازگشتی TryParse برابر true باشد؛ مقدار پیش‌فرض در مسیر شکست یک داده تأییدشده نیست.

تعریف، امضا و قرارداد خروجی

در الگوی TryParse، ورودی بررسی و نتیجه از طریق پارامتر out برگردانده می‌شود. خروجی bool موفقیت تبدیل نحوی را اعلام می‌کند و مقدار Enum در result قرار می‌گیرد؛ اعتبار دامنه کسب‌وکار مرحله‌ای جداست. این قرارداد برای مرزهای غیرقابل‌اعتماد، مانند فرم و فایل، خوانا است و مسیر شکست را به بخش عادی منطق برنامه تبدیل می‌کند.

امضاهای مهم

Enum.TryParse<TEnum>(string? value, out TEnum result);
    Enum.TryParse<TEnum>(string? value, bool ignoreCase, out TEnum result);
جزءنقشنکته حرفه‌ای
ورودیرشته یا Span حاوی مقدارnull، قالب و دامنه را بر اساس قرارداد بررسی کنید
resultمقدار تبدیل‌شدهفقط پس از موفقیت معتبر است
مقدار بازگشتیtrue یا falseمسیر کنترل اصلی اعتبارسنجی است
Culture و Styleقواعد تفسیردر نوع‌های حساس صریح تعیین شوند

تحلیل فنی و طراحی صحیح

استفاده حرفه‌ای از Enum.TryParse() با تشخیص مرز اعتماد آغاز می‌شود. متنی که کاربر، فایل CSV، پارامتر URL یا سامانه بیرونی تولید کرده است می‌تواند خالی، ناسازگار یا مخرب باشد. TryParse یک سد نحوی فراهم می‌کند، اما طول ورودی، قواعد دامنه، مجوز دسترسی و ارتباط مقدار با سایر فیلدها همچنان باید کنترل شود.

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

در API بهتر است خطای تبدیل به پاسخ ساخت‌یافته شامل نام فیلد و کد خطا تبدیل شود. در Import نیز ردیف‌های خراب را همراه شماره خط و دلیل رد در گزارش جدا نگه دارید. حذف خاموش خطاها ممکن است جمع گزارش یا تصمیم مدیریتی را تحریف کند؛ بنابراین شاخص کیفیت داده بخشی از خروجی فرایند است.

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

از نظر امنیت، Enum.TryParse() تنها تبدیل را انجام می‌دهد و جای اعتبارسنجی مجوز، محدودیت طول، Allowlist یا کنترل وجود رکورد را نمی‌گیرد. برای وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینه‌های محدود دامنه ورودی بسیار طولانی را پیش از پردازش محدود کنید، اطلاعات حساس را در لاگ ننویسید و پیام داخلی استثنا را مستقیماً به کاربر نشان ندهید.

از نظر نگهداری، بهتر است فراخوانی‌های تکراری در Parser یا Value Object دامنه‌ای متمرکز شوند. آن جزء می‌تواند Culture، بازه مجاز، پیام‌های فارسی و انگلیسی و سیاست null را یکسان کند. پراکندگی تبدیل در کنترلر، فرم و Repository معمولاً به رفتارهای متفاوت و رفع اشکال دشوار منجر می‌شود.

مثال‌های عملی گام‌به‌گام

ده مثال زیر از تبدیل پایه آغاز می‌شوند و به سناریوهای مجموعه‌داده، null، مرز، خطای Culture و کارایی می‌رسند. هر مثال برای Enum.TryParse() طراحی شده و نتیجه نمونه را بدون نیاز به اجرای اولیه نشان می‌دهد.

مثال شماره 1: تبدیل نام عضو

نام دقیق عضو Enum به مقدار نوع‌دار تبدیل می‌شود و شاخه موفقیت برای ادامه جریان سفارش استفاده می‌گردد.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string input = "Active";
            bool ok = Enum.TryParse<OrderStatus>(input, out OrderStatus status);
            Console.WriteLine($"ok={ok}; status={status}");
        }
    }
شاخص خروجینتیجه نمونه
موفقیتTrue
وضعیتActive

نوع Generic از cast و boxing غیرضروری جلوگیری می‌کند و خوانایی قرارداد را بالا می‌برد.

مثال شماره 2: نادیده گرفتن بزرگی حروف

برای ورودی انسانی می‌توان ignoreCase را true کرد تا active نیز پذیرفته شود.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string input = "active";
            bool ok = Enum.TryParse<OrderStatus>(input, ignoreCase: true, out OrderStatus status);
            Console.WriteLine($"{ok}/{status}");
        }
    }
شاخص خروجینتیجه نمونه
خروجیTrue/Active

در API داخلی ممکن است حساسیت دقیق به حروف برای کشف زودهنگام ناسازگاری مناسب‌تر باشد.

مثال شماره 3: پردازش دسته‌ای وضعیت‌ها

چند وضعیت واردشده تبدیل و تعداد خطاها گزارش می‌شوند. کل فایل با یک ردیف خراب متوقف نمی‌شود.

using System;
    using Linq;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string[] raw = { "Pending", "Active", "unknown", "Disabled" };
            int accepted = raw.Count(text => Enum.TryParse<OrderStatus>(text, true, out _));
            Console.WriteLine($"accepted={accepted}; rejected={raw.Length - accepted}");
        }
    }
شاخص خروجینتیجه نمونه
معتبر3
نامعتبر1

برای ردیف نامعتبر متن خام و شماره خط را ثبت کنید تا اصلاح منبع داده ممکن باشد.

مثال شماره 4: فیلتر وضعیت مجاز

موفقیت تبدیل با Allowlist کسب‌وکار ترکیب می‌شود؛ فقط Pending و Active برای عملیات جاری مجاز هستند.

using System;
    using Linq;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string[] raw = { "Pending", "Disabled", "bad" };
            OrderStatus[] allowed = { OrderStatus.Pending, OrderStatus.Active };
            var accepted = raw.Where(text =>
                Enum.TryParse<OrderStatus>(text, true, out OrderStatus status) &&
                allowed.Contains(status));
            Console.WriteLine(string.Join(", ", accepted));
        }
    }
شاخص خروجینتیجه نمونه
پذیرفتهPending

تعریف عضو Enum به‌تنهایی به معنی مجاز بودن آن در هر عملیات نیست. مجوز دامنه را جدا کنترل کنید.

مثال شماره 5: ترکیب با switch

پس از تبدیل موفق، switch رفتار مناسب هر وضعیت را انتخاب می‌کند و مسیر نامعتبر جدا می‌ماند.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string input = "Disabled";
            if (Enum.TryParse<OrderStatus>(input, true, out OrderStatus status))
            {
                string message = status switch
                {
                    OrderStatus.Pending => "در انتظار",
                    OrderStatus.Active => "فعال",
                    OrderStatus.Disabled => "غیرفعال",
                    _ => "ناشناخته"
                };
                Console.WriteLine(message);
            }
        }
    }
شاخص خروجینتیجه نمونه
پیامغیرفعال

switch exhaustiveness به نگهداری بهتر هنگام افزودن عضو جدید کمک می‌کند؛ مسیر پیش‌فرض را آگاهانه طراحی کنید.

مثال شماره 6: رفتار با null و خالی

هر دو ورودی بدون استثنا false می‌شوند. مقدار out نباید بدون بررسی وضعیت مصرف شود.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string? first = null;
            string second = "";
            Console.WriteLine(Enum.TryParse<OrderStatus>(first, out _));
            Console.WriteLine(Enum.TryParse<OrderStatus>(second, out _));
        }
    }
شاخص خروجینتیجه نمونه
nullFalse
خالیFalse

اختیاری بودن فیلد را در مدل بیان کنید؛ نبود مقدار و مقدار ناشناخته دو وضعیت متفاوت‌اند.

مثال شماره 7: عدد تعریف‌نشده

Enum.TryParse ممکن است عدد 99 را به نوع Enum تبدیل کند، با اینکه عضوی با این مقدار تعریف نشده است. Enum.IsDefined مرحله معنایی را تکمیل می‌کند.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            string input = "99";
            bool parsed = Enum.TryParse<OrderStatus>(input, out OrderStatus status);
            bool defined = parsed && Enum.IsDefined(status);
            Console.WriteLine($"parsed={parsed}; defined={defined}; raw={(int)status}");
        }
    }
شاخص خروجینتیجه نمونه
تبدیل نحویTrue
عضو تعریف‌شدهFalse

برای ورودی غیرقابل‌اعتماد کنترل IsDefined یا Allowlist ضروری است. برای Flags منطق اعتبار متفاوت است.

مثال شماره 8: Enum دارای Flags

نام‌های ترکیبی برای Enum پرچمی تبدیل می‌شوند و سپس HasFlag یا عملگر بیتی قابل استفاده است.

using System;

    internal static class Program
    {
        [Flags]
        private enum Permission
        {
            None = 0,
            Read = 1,
            Write = 2,
            Delete = 4
        }

        private static void Main()
        {
            const string input = "Read, Write";
            bool ok = Enum.TryParse<Permission>(input, true, out Permission value);
            Console.WriteLine($"ok={ok}; value={value}");
        }
    }
شاخص خروجینتیجه نمونه
موفقیتTrue
مقدارRead, Write

برای Flags باید بیت‌های ناشناخته را با ماسک اعضای مجاز کنترل کنید؛ IsDefined برای ترکیب‌های معتبر همیشه راه‌حل کافی نیست.

مثال شماره 9: Helper جنریک قابل استفاده مجدد

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

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static TEnum? ParseDefined<TEnum>(string? text)
            where TEnum : struct, Enum
        {
            return Enum.TryParse<TEnum>(text, true, out TEnum value) &&
                   Enum.IsDefined(value)
                ? value
                : null;
        }

        private static void Main()
        {
            Console.WriteLine(ParseDefined<OrderStatus>("Active"));
            Console.WriteLine(ParseDefined<OrderStatus>("99"));
        }
    }
شاخص خروجینتیجه نمونه
ActiveActive
99null

Helper مشترک باید با سیاست هر دامنه هماهنگ باشد؛ برای Flags یا aliasهای مجاز نسخه جدا بسازید.

مثال شماره 10: استفاده از ReadOnlySpan

توکن وضعیت از بافر بزرگ بدون substring به overload مبتنی بر Span داده می‌شود.

using System;

    internal static class Program
    {
        private enum OrderStatus
        {
            Pending = 1,
            Active = 2,
            Disabled = 3
        }

        private static void Main()
        {
            ReadOnlySpan<char> token = "Pending".AsSpan();
            bool ok = Enum.TryParse<OrderStatus>(token, true, out OrderStatus status);
            Console.WriteLine($"{ok}/{status}");
        }
    }
شاخص خروجینتیجه نمونه
خروجیTrue/Pending

در Parser حجیم مفید است. سازگاری نسخه هدف را بررسی کنید، زیرا overloadهای Span در چارچوب‌های قدیمی موجود نیستند.

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

  • استفاده از result بدون بررسی مقدار بازگشتی؛ اصلاح: منطق مصرف مقدار را داخل شاخه موفقیت قرار دهید.
  • یکی گرفتن مقدار پیش‌فرض با شکست؛ اصلاح: وضعیت تبدیل را همراه مقدار نگه دارید یا Result صریح بسازید.
  • اتکا به فرهنگ سرور؛ اصلاح: Culture و Style را از قرارداد داده تعیین کنید.
  • پذیرش هر مقدار قابل تبدیل؛ اصلاح: پس از تبدیل، بازه، Allowlist و قواعد ارتباطی دامنه را بررسی کنید.
  • حذف خاموش رکورد خراب در Import؛ اصلاح: شمارش و گزارش خطا را در خروجی فرایند قرار دهید.
  • نادیده گرفتن نکته اختصاصی نوع؛ اصلاح: یک عدد خارج از اعضای تعریف‌شده ممکن است تبدیل شود؛ پس در ورودی غیرقابل‌اعتماد Enum.IsDefined یا Allowlist را نیز بررسی کنید.

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

کارایی، تخصیص حافظه و Best Practice

TryParse برای شکست قابل انتظار از الگوی Parse همراه try/catch مناسب‌تر است، زیرا استثنا برای کنترل جریان عادی طراحی نشده است. این حکم به معنی ممنوع بودن Parse نیست؛ اگر رشته یک ثابت داخلی معتبر است و خرابی آن باگ برنامه محسوب می‌شود، fail-fast با Parse می‌تواند انتخاب روشنی باشد.

overloadهای ReadOnlySpan در Parserهای پرتکرار امکان کار روی برشی از بافر را بدون ساخت substring می‌دهند. سود آن در فایل‌های بزرگ، پروتکل یا پردازش میلیون‌ها توکن بیشتر است. در فرم عادی، پیچیدگی اضافی ممکن است ارزش نداشته باشد؛ ابتدا CPU، Allocation و نرخ شکست را اندازه‌گیری کنید.

برای آزمون، حداقل حالت‌های معتبر، null، خالی، فاصله، Culture متفاوت، کمینه، بیشینه، خارج از محدوده و مقدار معتبر ولی غیرمجاز را پوشش دهید. تست‌ها باید Target Framework واقعی را اجرا کنند، زیرا برخی overloadها و رفتارهای گوشه‌ای میان نسخه‌های .NET تفاوت دارند.

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

پرسش 1: Enum.TryParse() دقیقاً چه مسئله‌ای را حل می‌کند؟

Enum.TryParse() متن را با قرارداد نوع مقصد بررسی می‌کند و بدون تبدیل شکست قابل انتظار به استثنا، وضعیت موفقیت را برمی‌گرداند. این ویژگی در ورودی کاربر، فایل، API و تنظیمات ارزشمند است. حوزه رایج این مقاله وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینه‌های محدود دامنه است، اما اعتبار نحوی فقط نخستین مرحله است و قواعد دامنه باید جدا اعمال شوند.

پرسش 2: در صورت شکست Enum.TryParse() چه اتفاقی برای result می‌افتد؟

متد false برمی‌گرداند و result مقدار پیش‌فرض نوع را خواهد داشت یا نباید معتبر فرض شود. الگوی درست این است که result فقط در شاخه true مصرف شود. تکیه بر صفر، false، تاریخ کمینه یا Guid.Empty می‌تواند داده نامعتبر را با یک مقدار واقعی اشتباه بگیرد و خطای خاموش ایجاد کند.

پرسش 3: Culture چه اثری بر Enum.TryParse() دارد؟

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

پرسش 4: چگونه Enum.TryParse() را در نرم‌افزار تجاری استفاده کنیم؟

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

پرسش 5: آیا جایگزینی بهتر از Enum.TryParse() وجود دارد؟

پاسخ به قرارداد ورودی وابسته است. برای قالب ثابت TryParseExact، برای داده‌ای که خرابی آن باگ است Parse، و برای تبدیل‌های سفارشی یک Value Object یا Parser دامنه‌ای مناسب‌تر است. هدف انتخاب کوتاه‌ترین کد نیست؛ باید خطا، Culture، سازگاری نسخه و پیام کاربر به‌روشنی مدیریت شود.

پرسش 6: برای پیاده‌سازی سازمانی Enum.TryParse() چه خدماتی لازم می‌شود؟

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

پرسش 7: خطای رایج هنگام کار با Enum.TryParse() چیست؟

رایج‌ترین خطا استفاده از result بدون بررسی مقدار بازگشتی است. خطاهای دیگر شامل اتکا به Culture جاری، نادیده گرفتن مرز نوع، یکی گرفتن اعتبار نحوی و معنایی و حذف خاموش رکورد نامعتبر است. نکته اختصاصی این موضوع نیز چنین است: یک عدد خارج از اعضای تعریف‌شده ممکن است تبدیل شود؛ پس در ورودی غیرقابل‌اعتماد Enum.IsDefined یا Allowlist را نیز بررسی کنید.

پرسش 8: کارایی Enum.TryParse() در پردازش حجیم چگونه است؟

در شکست‌های قابل انتظار، TryParse معمولاً از کنترل جریان با exception مناسب‌تر است. overloadهای ReadOnlySpan می‌توانند تخصیص substring را کاهش دهند. بااین‌حال نتیجه به نسخه .NET، الگوی داده و مسیر اجرا وابسته است؛ پروفایلر و BenchmarkDotNet باید تصمیم را تأیید کنند و بهینه‌سازی زودهنگام نباید خوانایی را قربانی کند.

پرسش 9: بهترین روش طراحی با Enum.TryParse() چیست؟

قرارداد ورودی را مستند کنید، Culture و Style را در صورت نیاز صریح بدهید، result را فقط پس از true مصرف کنید، اعتبار دامنه را جدا بسنجید و خطا را با پیام قابل اقدام گزارش دهید. برای وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینه‌های محدود دامنه آزمون‌های مرزی، null، مقدار نامعتبر، ورودی بسیار بزرگ و سناریوی واقعی کسب‌وکار را در مجموعه تست قرار دهید.

پرسش 10: Enum.TryParse() با کدام نسخه‌های C# و .NET سازگار است؟

overload پایه string در نسخه‌های قدیمی .NET نیز در دسترس است، اما overloadهای Span، UTF-8 و رابط‌های Generic Math در نسخه‌های جدیدتر افزوده شده‌اند. پروژه باید مستندات Target Framework خود را مبنا قرار دهد. اگر کتابخانه چندهدفه است، API سطح مشترک را انتخاب یا برای نسخه‌های جدید مسیر بهینه جدا تعریف کنید.

سؤالات مصاحبه C# و .NET

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

  1. تفاوت قرارداد خطای Enum.TryParse() با Parse را توضیح دهید و برای هر کدام یک سناریو نام ببرید.
  2. چرا بررسی مقدار بازگشتی قبل از result ضروری است و مقدار پیش‌فرض چه خطری دارد؟
  3. اثر Culture، Style یا قالب ورودی بر Enum.TryParse() را با یک مثال تشریح کنید.
  4. اعتبار نحوی و اعتبار کسب‌وکار در موضوع وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینه‌های محدود دامنه چگونه از هم جدا می‌شوند؟
  5. چه زمانی overload مبتنی بر ReadOnlySpan ارزشمند است و چگونه سود آن را اندازه می‌گیرید؟

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

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

جمع‌بندی

Enum.TryParse() ابزار کوچکی برای ساخت مرز ورودی قابل اعتماد است. ارزش واقعی آن زمانی دیده می‌شود که قرارداد فرهنگ، محدوده، گزارش خطا و اعتبار دامنه پیرامونش درست طراحی شود. در وضعیت سفارش، سطح دسترسی، نوع عملیات و گزینه‌های محدود دامنه همین رویکرد از داده خاموش اشتباه، استثناهای پرتکرار و اختلاف رفتار محیط‌ها جلوگیری می‌کند.

برای مرور سایر نوع‌ها و انتخاب API مناسب، راهنمای جامع همه متدهای TryParse در C# و .NET را مطالعه کنید.

 

0 نظر

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

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

حرف 500 حداکثر