Wednesday, June 25, 2008

A few helper methods in C#

Just a few methods I find myself using in a lot of projects...

  1. public static int ConvertToInt(this string value, int def)  
  2. {  
  3.   int result;  
  4.   return Int32.TryParse(value, out result) ? result : def;  
  5. }  
  6.   
  7. public static int ConvertToInt(this string value)  
  8. {  
  9.   return ConvertToInt(value, -1);  
  10. }  


Usage:

  1. string s = "123";  
  2. Console.WriteLine(s.ConvertToInt());  


  1. public static void ForEach<T>(this IEnumerable<T> set, Action<T> action)  
  2. {  
  3.   Debug.Assert(set != null"set");  
  4.   Debug.Assert(action != null"action");  
  5.   
  6.   foreach (var item in set)  
  7.     action(item);  
  8. }  
  9.   
  10. public static void ForEach(this IEnumerable set, Action<object> action)  
  11. {  
  12.   Debug.Assert(set != null"set");  
  13.   Debug.Assert(action != null"action");  
  14.   
  15.   foreach (var item in set)  
  16.     action(item);  
  17. }  


I find it much more expressive to use this ForEach extension method instead of a foreach loop:

  1. list.ForEach(item => { ... do something with item ... });  


rather than

  1. foreach(var item in list)  
  2.   { ... do something with item ... }  


It's probably just a quirk of mine, but I prefer it.

  1. public static string AsXML(this object obj)  
  2. {  
  3.   if (obj == null)  
  4.     return "<NULL />";  
  5.   
  6.   string str;  
  7.   Encoding utf8 = new UTF8Encoding();  
  8.   var objType = obj.GetType();  
  9.   var xmlatt = (XmlTypeAttribute) Attribute.GetCustomAttribute(objType, typeof (XmlTypeAttribute));  
  10.   
  11.   using (var ms = new MemoryStream())  
  12.   using (var x = new XmlTextWriter(ms, utf8) {Formatting = Formatting.Indented})  
  13.   {  
  14.     var xs = xmlatt == null ? new XmlSerializer(objType) : new XmlSerializer(objType, xmlatt.Namespace);  
  15.     xs.Serialize(x, obj);  
  16.     str = utf8.GetString(ms.GetBuffer(), 0, (int) ms.Length);  
  17.   }  
  18.   
  19.   return str;  
  20. }  
  21.   
  22. public static object AsObject(this string xml, Type type)  
  23. {  
  24.   using (var sr = new StringReader(xml))  
  25.     return new XmlSerializer(type).Deserialize(sr);  
  26. }  
  27.   
  28. public static T As<T>(this string xml) where T : class  
  29. {  
  30.   return xml.AsObject(typeof (T)) as T;  
  31. }  


Good when you need to (de)serialize pesky objects. Usage:

  1. MyClass x = new MyClass();  
  2. string s = x.AsXML();  
  3. x = s.As<MyClass>();  

No comments: