C #: Obtención de valores máximos y mínimos de propiedades arbitrarias de todos los elementos en una lista

Tengo una lista especializada que contiene artículos de tipoIThing:

public class ThingList : IList<IThing>
{...}

public interface IThing
{
    Decimal Weight { get; set; }
    Decimal Velocity { get; set; }
    Decimal Distance { get; set; }
    Decimal Age { get; set; }
    Decimal AnotherValue { get; set; }

    [...even more properties and methods...]
}

A veces necesito saber el máximo o el mínimo de cierta propiedad de todas las cosas en la lista. Debido a "Diga, no preguntes", dejamos que la lista lo resuelva:

public class ThingList : IList<IThing>
{
    public Decimal GetMaximumWeight()
    {
        Decimal result = 0;
        foreach (IThing thing in this) {
            result = Math.Max(result, thing.Weight);
        }
        return result;
    }
}

Eso es muy bonito. Pero a veces necesito el peso mínimo, a veces la velocidad máxima y así sucesivamente. No quiero unGetMaximum*()/GetMinimum*() par para cada propiedad individual.

Una solución sería la reflexión. Algo parecido a (agarra la nariz, fuerte olor a código):

Decimal GetMaximum(String propertyName);
Decimal GetMinimum(String propertyName);

¿Hay alguna forma mejor, menos apestosa para lograr esto?

Gracias eric

Edición: @Matt: .Net 2.0

Conclusión: no hay mejor manera para .Net 2.0 (con Visual Studio 2005). Tal vez deberíamos cambiarnos a .Net 3.5 y Visual Studio 2008 pronto. Gracias chicos.

Conclusión: hay formas diferentes que son mucho mejores que la reflexión. Dependiendo del tiempo de ejecución y la versión C #. Echa un vistazo a la respuesta de Jon Skeets por las diferencias. Todas las respuestas son muy útiles.

Iré por la sugerencia de Sklivvz (métodos anónimos). Hay varios fragmentos de código de otras personas (Konrad Rudolph, Matt Hamilton y Coincoin) que implementan la idea de Sklivvz. Solo puedo "aceptar" una respuesta, desafortunadamente.

Muchas gracias. Todos pueden sentirse "aceptados", aunque solo Sklivvz obtiene los créditos ;-)

Respuestas a la pregunta(8)

Su respuesta a la pregunta