C # абсолютное значение для динамического типа - PullRequest
0 голосов
/ 19 января 2010

У меня есть код, который вычисляет абсолютное значение типа пользовательского значения:

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

Это не мое настоящее заявление, но оно послужит моей точке зрения. Тогда у меня есть такой метод:

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

У меня такой вопрос: в функции DoStuff () как перегрузить функцию Abs (), чтобы она принимала обычные типы значений с помощью System.Math.Abs ​​(), но также принимала тип Angle?

C # 4.0 поддерживаются ответы доступны.

Я готов иметь отдельную функцию; что-то вроде этого [при условии, что это действительно сработает]:

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

Ответы [ 2 ]

0 голосов
/ 19 января 2010

Отдельные функции, не нужно вызывать GetType.Это поведение полностью зависит от того факта, что F [] имеет тип «динамический».

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

Abs(F[0])
0 голосов
/ 19 января 2010
public dynamic Abs(dynamic dyn)
{
    if (dyn.GetType() = typeof(Angle))
    {
        return Abs(dyn);
    }
    else
    {
        return System.Math.Abs(dyn);
    }
}
...