使用Generic类计算数字的绝对值

时间:2014-11-03 19:40:18

标签: c# .net generics

static void Main(string[] args)
{
    AbsValue<int> ABS = new AbsValue<int>();
    AbsValue<double> ABSdouble = new AbsValue<double>();

        ABS.X = -5;
        ABSdouble.X = 65.3;

    Console.WriteLine("Integer absolute value: {0}", Math.Abs(ABS.X));
    Console.WriteLine("Double absolute value: {0}", Math.Abs(ABSdouble.X));

    Console.ReadLine();

    }
}

我不认为这是正确的,但它似乎有效。能否请你给我一些建议,我怎样才能做得更好?

class AbsValue<T>
{ 
     public T X;  
}

2 个答案:

答案 0 :(得分:0)

如果您想一般Abs,您可以创建一个界面并为doubleint实施,例如:

public interface IAbsNum<T>
{
   T Abs(T num);
}

public class IntAbsNum : IAbsNum<int>
{
    public int Abs(int num) { return Math.Abs(num); }
}

答案 1 :(得分:0)

Math.Abs包装到泛型函数中并不是一种干净的方法,因为1)该函数不是通用的,而是针对每种数字类型设计为overloads,以及2)创建.NET 1 中无法使用数字类型的通用约束。

即使您这样做了,您仍然需要使用巨大的switch语句来调用正确的Math.Abs重载。

我认为作为初学者我会找到一个不同的问题 - 这个问题不是一个简单的学习练习。


1 你可以通过将参数约束到struct, IComparable, IFormattable来近距离接触,但它并没有真正为你买单,因为你必须施展到使用任何运算符或框架数学函数。