2009-06-07 11 views
5

Desidero scrivere una serie di metodi di estensione per semplificare le operazioni matematiche. Per esempio:Come scrivere correttamente i metodi di estensione matematica per int, double, float, ecc.?

Invece di

Math.Pow(2, 5) 

Mi piacerebbe essere in grado di scrivere

2.Power(5) 

che è (nella mia mente) più chiara.

Il problema è: come gestisco i diversi tipi numerici durante la scrittura dei metodi di estensione? Ho bisogno di scrivere un metodo di estensione per ogni 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 c'è un trucco per permettere una sola opera Metodo di estensione per qualsiasi tipo numerico?

Grazie!

+3

un altro voto per INumeric – Robert

+0

+1 Sì, sono sorpreso che non era parte del framework per cominciare. – Pwninstein

+1

** Avvertenza ** quando si utilizzano tali metodi di estensione: ** '-10.Power (2) == -100' **. Il segno meno viene applicato al risultato di '10.Power (2)'. – HugoRune

risposta

2

Purtroppo penso che tu sia bloccato con le tre implementazioni. L'unico modo per ottenere più metodi tipizzati da una singola definizione è l'utilizzo di generici, ma non è possibile scrivere un metodo generico che possa fare qualcosa di utile specificamente per i tipi numerici.

0

Hai solo bisogno di ignorare Decimale e doppia come è noto in questa domanda: here

0

Una soluzione che uso è quello di rendere l'estensione su oggetto. Questo lo rende possibile, ma sfortunatamente sarà visibile su tutti gli oggetti.

public static double Power(this object number, double power) 
{ 
    return Math.Pow((double) number, power); 
} 
Problemi correlati