¿Cómo escribo correctamente los métodos de extensión matemática para int, double, float, etc.

Quiero escribir una serie de métodos de Extensión para simplificar las operaciones matemáticas. Por ejemplo

En lugar d

Math.Pow(2, 5)

Me gustaría poder escribir

2.Power(5) 

que es (en mi opinión) más claro.

El problema es: ¿cómo trato con los diferentes tipos numéricos al escribir métodos de extensión? ¿Debo escribir un método de extensión para cada tipo:

public static double Power(this double number, double power) {
    return Math.Pow(number, power);
}
public static double Power(this int number, double power) {
    return Math.Pow(number, power);
}
public static double Power(this float number, double power) {
    return Math.Pow(number, power);
}

¿O hay algún truco para permitir que un solo Método de Extensión funcione para cualquier tipo numérico?

¡Gracias

Respuestas a la pregunta(8)

Su respuesta a la pregunta