Gentili,
sono di nuovo a richiedere un aiuto ai più esperti.
In pratica volevo implementare due metodi di estensione che effettuano l'arrotondamento per eccesso e difetto per n cifre, per i soli tipi double, decimal e float.
La prima implementazione è stata così:
public static class NumeriArrotondamento
{
public static T ArrotondaPerDifetto<T>(this T num, int numDecimali)
{
//codice che fa i calcoli
return T // arrotondato per difetto
}
public static T ArrotondaPerEccesso<T>(this T num, int numDecimali)
{
//codice che fa i calcoli
return T // arrotondato per eccesso
}
}
Chiaramente con mio sommo disappunto, in questo modo tutti i tipi di oggetti si troveranno LOGICAMENTE ad avere questi metodi, il che non è il massimo; allora per limitare ho aggiunto una clausola Where del tipo:
public static T ArrotondaPerDifetto<T>(this T num, int numDecimali) where T: struct
per limitare ai soli tipi struct però anche tutti gli altri tipi struct si ritrovano con i metodi.
Ho provato allora a fare così:
public static T ArrotondaPerDifetto<T>(this T num, int numDecimali) where T: IComparable<Double>, IComparable<Decimal>, IComparable<Single>
però non funziona perché la virgola funziona in un certo senso come un AND.
Premesso che:
1) nei commenti Xml ai metodi ho specificato chiaramente che vanno usati solo ed esclusivamente per quei tre tipi;
2) i metodi ritornano un'eccezione per i tipi di dato non previsti con descrizione dell'errore molto esaustiva.
Secondo voi c'è un modo per implementare i due metodi alla perfezione, cioé c'è la possibilità del tipo Where : tipo1 OR tipo2 OR tipo3; oppure è meglio implementare i metodi separatamente per ciascun tipo senza ricorrere ai generics?
Ringrazio in anticipo chi vorrà darmi una dritta e vi saluto.
Lucius