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

روش استفاده از کلاس 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 باشید

1 نظر
نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

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