حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش تبدیل رشته به انواع داده در سی شارپ با Type Descriptor

در زبان سی شارپ مفهومی وجود دارد به نام 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 باشید


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات