2010-01-18 5 views
0

J'ai du code qui calcule la valeur absolue d'un type de valeur personnalisée:C# valeur absolue pour le type dynamique

public Angle Abs(Angle agl) 
{ 
    return (360 - Angle.Degrees); 
} 

Ce n'est pas ma demande réelle, mais elle servira mon point. Ensuite, j'ai une méthode comme ceci:

public dynamic DoStuff(Foo f) 
{ 
    // f contains a list of value types: int, double, decimal, angle 
    return Abs(f[0]); 
} 

public dynamic this[int intIndex] // Within class Foo 
{ 
    get { return Items[intIndex]; } 
} 

Ma question est la suivante: dans la fonction DoStuff() comment puis-je surcharger la fonction Abs() pour accepter les types de valeur normale à l'aide System.Math.Abs ​​(), mais aussi accepter le type d'angle?

Les réponses supportées par C# 4.0 sont disponibles.

Je suis prêt à avoir une fonction séparée; quelque chose comme ça [en supposant qu'il travaillerait en réalité]:

public dynamic Abs(dynamic dyn) 
{ 
    if (dyn.GetType() = typeof(Angle)) 
    { 
     return Abs(dyn); 
    } 
    else 
    { 
     return System.Math.Abs(dyn); 
    } 
} 
+0

Avez-vous essayé votre idée de «fonction séparée»? –

+0

La fonction séparée fonctionne apparemment. J'ai littéralement copié et collé car il ne compilerait pas. Je n'ai aucune idée pourquoi cela fonctionne maintenant et n'a pas fonctionné plus tôt. Wierd. Peut-être un pépin Beta2. – Ames

Répondre

0

fonctions distinctes, pas besoin d'appeler GetType. Ce comportement dépend entièrement du fait que F [] soit de type "dynamique".

public Angle Abs(Angle agl) 
{ 
    return (360 - Angle.Degrees); 
} 
public dynamic Abs(dynamic n) 
{ 
    return Math.Abs(n); 
} 

Abs(F[0]) 
0
public dynamic Abs(dynamic dyn) 
{ 
    if (dyn.GetType() = typeof(Angle)) 
    { 
     return Abs(dyn); 
    } 
    else 
    { 
     return System.Math.Abs(dyn); 
    } 
} 
Questions connexes