Em um projeto em qual estou trabalhando, precisei consumir um WebService e, para variar, ele retorna um Dataset e DataTables. Como em minha aplicação eu trabalho com objetos mais específicos, então tentei criar um método que convertesse cada uma das DataRows em um desses objetos e, para facilitar o trabalho, criei uma classe que é composta com alguns métodos estáticos e, entre eles, existe um que chamei de Converter:
public class CollectionHelper
{
public static IEnumerable<TOutput> Converter<TInput, TOutput>(IEnumerable coll, Converter<TInput, TOutput> converter)
{
foreach (object o in coll)
{
yield return converter((TInput)o);
}
}
}
E para utilizá-lo:
IEnumerable<Usuario> result = CollectionHelper.Converter<DataRow, Usuario>(dt.Rows,
new Converter<DataRow, Usuario>(delegate(DataRow dr)
{
return new Usuario(dr[“Nome”].ToString());
}));