Como eu escrevo corretamente os métodos de extensão Math para int, double, float etc

Quero escrever uma série de métodos de extensão para simplificar as operações matemáticas. Por exemplo

Ao invés d

Math.Pow(2, 5)

Eu gostaria de poder escrever

2.Power(5) 

que é (em minha mente) mais claro.

O problema é: como faço para lidar com os diferentes tipos numéricos ao escrever métodos de extensão? Preciso escrever um método de extensão 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);
}

xiste algum truque para permitir que um único Método de Extensão funcione para qualquer tipo numéric

Obrigado

questionAnswers(8)

yourAnswerToTheQuestion