در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

متدی برای تبدیل رشته به هر نوع داده :: استفاده از کلاس TypeDescriptor

در زبان سی شارپ مفهومی وجود دارد به نام Type Casting که به شما اجازه می دهد تا نوع های داده مختلف را به هم تبدیل کنید. یکی از پرکاربرد ترین تبدیل ها، تبدیل رشته به سایر نوع ها است، برای مثال برای تبدیل رشته به عدد صحیح به صورت زیر عمل می کنیم:

int num = int.Parse("12");

یا برای تبدیل تاریخ به رشته به صورت زیر عمل می کنیم:

DateTime date = DateTime.Parse("2012-05-5 12:22:22");

همانطور که مشاهده می کنید برای هر نوع داده راه کاری متفاوت وجود دارد. در این نکته می خواهیم راهکاری ارائه دهیم که بوسیله کلاس Type Descriptor و قابلیت Generic ها می توان یک مبدل رشته به هر نوع داده ای نوشت. همانطور که گفتیم از کلاس TypeDescriptor استفاده می کنیم. در دات نت دو راهکار برای دسترسی به Meta Data های نوع های داده وجود دارد، یکی Reflection و دیگری استفاده از کلاس TypeDescriptor. در این کلاس یک متد static با نام GetConvertor تعریف شده است که خروجی آن شئ ای از نوع TypeConvertor است. کلاس TypeConvertor بر اساس نوع داده مربوط به آن یکسری متد برای Type Casting ارائه می دهد که یکی از این متدها ConvertFromString است که عملیات تبدیل رشته را به نوع مورد نظر انجام می دهد. برای مثال به صورت زیر می توان Convertor نوع داده int را بدست آورد و عملیات تبدیل از رشته را انجام داد:

var intConvertor = TypeDescriptor.GetConverter(typeof (int));
var num = (int) intConvertor.ConvertFromString("12");

اما همانطور که گفتیم در این مطلب می خواهیم یک تبدیل کننده عمومی بنویسیم که نوع رشته را به هر نوعی تبدیل کند. برای اینکار یک Extension Method برای نوع داده رشته می نویسیم که یک پارامتر جنریک قبول می کند و نوع بازگشتی این متد از نوع این پارامتر جنریک است و در بدنه Method بر اساس نوع پارامتر جنریک TypeConvertor را را بدست آورده و عملیات تبدیل را به صورت زیر انجام می دهیم:

public static class StringExtensions
{
    public static T As<T>(this string input)
    {
        return (T) TypeDescriptor.GetConverter(typeof (T)).ConvertFromString(input);
    }
}

حال به راحتی می توان از این متد به صورت زیر استفاده کرد:

int num = "12".As<int>();
decimal dec = "12.4".As<decimal>();
DateTime date = "2015-05-05 12:22:22".As<DateTime>();

این متد بر روی تمامی رشته ها قابل استفاده است. امیدوارم که این نکته مورد توجه دوستان عزیز قرار گرفته باشد. ITPRO باشید

#آموزش_سی_شارپ #تبدیل_رشته_به_نوع_های_داده_دیگر #کلاس_typeconvertor_در_سی_شارپ #نکات_سی_شارپ #تبدیل_کننده_عمومی_رشته_در_سی_شارپ #کلاس_typedescriptor_در_دات_نت #آموزش_برنامه_نویسی
1 نظر
نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....