C # - IDataReader al mapeo de objetos usando genéricos

¿Cómo puedo asignar un objeto DataReader a un objeto de clase usando genéricos?

Por ejemplo necesito hacer lo siguiente:

public class Mapper<T>
    {
        public static List<T> MapObject(IDataReader dr)
        {
            List<T> objects = new List<T>();

            while (dr.Read())
            {
                //Mapping goes here...
            }

            return objects;
        }
    }

Y luego necesito llamar a este método de clase como el siguiente:

IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book");

List<Book> bookList = Mapper<Book>.MapObject(dataReder);

foreach (Book b in bookList)
{
     Console.WriteLine(b.ID + ", " + b.BookName);
}

Tenga en cuenta que, la clase Mapper debe poder asignar objetos de cualquier tipo representado por T.

Respuestas a la pregunta(10)

Su respuesta a la pregunta