Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C#: Dynamic parse from System.Type

I have a Type, a String and an Object.

Is there some way I can call the parse method or convert for that type on the string dynamically?

Basically how do I remove the if statements in this logic

object value = new object();     String myString = "something"; Type propType = p.PropertyType;  if(propType == Type.GetType("DateTime")) {     value = DateTime.Parse(myString); }  if (propType == Type.GetType("int")) {     value = int.Parse(myString); } 

And do someting more like this.

object value = new object(); String myString = "something"; Type propType = p.PropertyType;   //this doesn't actually work value = propType .Parse(myString);   
like image 833
ctrlShiftBryan Avatar asked Mar 04 '10 15:03

ctrlShiftBryan


People also ask

Bahasa C digunakan untuk apa?

Meskipun C dibuat untuk memprogram sistem dan jaringan komputer namun bahasa ini juga sering digunakan dalam mengembangkan software aplikasi. C juga banyak dipakai oleh berbagai jenis platform sistem operasi dan arsitektur komputer, bahkan terdapat beberepa compiler yang sangat populer telah tersedia.

C dalam Latin berapa?

C adalah huruf ketiga dalam alfabet Latin. Dalam bahasa Indonesia, huruf ini disebut ce (dibaca [tʃe]).

Bahasa C dibuat pertama kali oleh siapa dan tahun berapa?

Bahasa pemrograman C ini dikembangkan antara tahun 1969 – 1972 oleh Dennis Ritchie. Yang kemudian dipakai untuk menulis ulang sistem operasi UNIX. Selain untuk mengembangkan UNIX, bahasa C juga dirilis sebagai bahasa pemrograman umum.


2 Answers

TypeDescriptor to the rescue!:

var converter = TypeDescriptor.GetConverter(propType); var result = converter.ConvertFrom(myString); 

All primitive types (plus Nullable<TPrimitive>, and numerous other built-in types) are integrated into the TypeConverter infrastructure already, and are thus supported 'out-of-the-box'.

To integrate a custom type into the TypeConverter infrastructure, implement your own TypeConverter and use TypeConverterAttribute to decorate the class to be converted, with your new TypeConverter

like image 147
Anton Gogolev Avatar answered Sep 20 '22 08:09

Anton Gogolev


This should work for all primitive types, and for types that implement IConvertible

public static T ConvertTo<T>(object value) {     return (T)Convert.ChangeType(value, typeof(T)); } 

EDIT : actually in your case, you can't use generics (not easily at least). Instead you could do that :

object value = Convert.ChangeType(myString, propType); 
like image 38
Thomas Levesque Avatar answered Sep 18 '22 08:09

Thomas Levesque