- Published on
A simple lesson using type converters
- Authors
-
-
- Name
- David Mohundro
- Bluesky
- @david.mohundro.com
-
I found myself writing the following code this evening:
public T GetItem<T>(string name){ string result = node.SelectSingleNode(name).InnerText.Trim();
return (T)GetConverter(typeof(T)).ConvertFromString(result);}
private TypeConverter GetConverter(Type objectType){ if (objectType.Equals(typeof(int))) return new Int32Converter(); else if (objectType.Equals(typeof(bool))) return new BooleanConverter(); else if (objectType.Equals(typeof(string))) return new StringConverter(); else throw new ArgumentException("Does not support casting to " + objectType.Name);}
Don’t ever write code like this. Read the documentation which explicitly says that “you should never create an instance of a BooleanConverter”. If you follow their advice, your code will become much cleaner. Like so:
public T GetItem<T>(string name){ string result = node.SelectSingleNode(name).InnerText.Trim(); return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(result);}