views:

379

answers:

3

I want to write a series of Extension methods to simplify math operations. For example:

Instead of

Math.Pow(2, 5)

I'd like to be able to write

2.Power(5)

which is (in my mind) clearer.

The problem is: how do I deal with the different numeric types when writing Extension Methods? Do I need to write an Extension Method for each type:

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);
}

Or is there a trick to allow a single Extension Method work for any numeric type?

Thanks!

+2  A: 

Unfortunately I think you are stuck with the three implementations. The only way to get multiple typed methods out of a single definition is using generics, but it is not possible to write a generic method that can do something useful specifically for numeric types.

jerryjvl
+1  A: 

I dont think its possible with C# 3.0. Looks like you might be able to do it C# 4.0

http://blogs.msdn.com/lucabol/archive/2009/02/05/simulating-inumeric-with-dynamic-in-c-4-0.aspx

Vasu Balakrishnan
Good point... I'm not sure that the performance hit is going to be worth the price in the general case though.
jerryjvl
A: 

You only need to override Decimal and Double as is noted in this question: here

Woot4Moo