做天写了一个矩阵运算类,我尝试了用泛型来实现,很明显泛型能在我给我的矩阵应用带来更多的选择.矩阵运算在游戏及其AI运用很广泛.不过后来我一想,还是没有必要运用泛型实现.不过昨天的经历让我有兴趣和大家讨论一下C#泛型参数的值运算问题:泛型参数带来的好处的同时也不能忽视其局限性. 泛型参数应用的一个很老的例子就是交换两个数的值了,比如下面的方法实现了两个任意值类型参数的值交换: public void Swap(ref T a, ref T b) { T temp = a; a = b; b = temp; } 当然此方法不能应用于引用类型参数,为了防止泛型编程过程中,不恰当的调入应用参数增加隐性bug,C#对泛型增加了参数约束.在C#中参数约束是通过where关键字实现的,关于更多的泛型参数约束请参考MSDN 上面的方法中参数a,b肯定只能是值类型,所以修正程序第一行如下: public void Swap(ref T a, ref T b) where T:struct 现在我们讨论的不是泛型的概念,不妨考虑一下以下问题: 能否通过泛型实现一个方法来返回所有参数中最大的那个呢? 能否通过泛型实现一个方法来得到一个泛型参数的倒数呢? 能否计算方法中泛型参数的绝对值,或者取负呢? … 就拿第一个问题吧,很可能我们会写出下面的代码: public T GetTheGreater(T a, T b) where T:struct { if(a>b) return a; else return b; [...]