0 votes

C# Valeur absolue pour le type dynamique

Je dispose du code qui calcule la valeur absolue d'un type de valeur personnalisé :

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

Ce n'est pas mon application réelle mais cela illustrera mon propos. Ensuite, j'ai une méthode comme ceci :

public dynamic DoStuff(Foo f)
{
    // f contient une liste de types de valeur : int, double, decimal, angle
    return Abs(f[0]);
}

public dynamic this[int intIndex] // Au sein de la classe 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 normaux en utilisant System.Math.Abs(), mais également accepter le type de Angle ?

Des réponses compatibles avec C# 4.0 sont disponibles.

Je suis prêt à avoir une fonction séparée ; quelque chose comme ceci [en supposant que cela fonctionnerait réellement] :

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

0voto

PauloP Points 21
public dynamic Abs(dynamic dyn)
{
    if (dyn.GetType() == typeof(Angle))
    {
        return Abs(dyn);
    }
    else
    {
        return System.Math.Abs(dyn);
    }
}

0voto

Jimmy Points 35501

Fonctions séparées, pas besoin d'appeler GetType. Ce comportement dépend entièrement du fait que F[] est de type "dynamic".

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

Abs(F[0])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X