当前位置:编程学习 > C#/ASP.NET >>

浅谈c#泛型类型变量作为操作数使用的通用解决方法

问题来源:在c#编程中,经常会对一些数字型基元类型如Int16,Int32,Int64,Decimal等,做一些加减乘除等等运算的事情。比如我们经常写出下面的方法,用来计算从0开始到输入的32位整数之间数字的总和(没有考虑溢出等特殊情况):

 
1 internal static Int32 Sum(int num)
2 {
3     Int32 sum = 0;
4     for (Int32 i = 0; i < num; i++)
5     {
6         sum += i;
7     }
8     return sum;
9 }

同理,如果我们需要返回类型和输入类型为其他基元类型,如Decimal,Int64等等,正常情况下我们都会修改上述代码中返回和输入参数类型,比如可以这样对Int64进行求和:

 
1 internal static Int64 Sum(Int64 num)
2 {
3     Int64 sum = 0;
4     for (Int64 i = 0; i < num; i++)
5     {
6         sum += i;
7     }
8     return sum;
9 }

但是这样有多少种不同的基元数字类型是不是就要写多少个这样的方法(这里不考虑某些数字型基元类型之间的相互转换),造成方法膨胀,代码臃肿?大家分析上面的代码,发现参数个数,运算格式非常类似,毫无疑问会想到抽象出一个公共的泛型方法来解决数字型基元类型的运算问题。

在<<CLR Via C#>>一书中,Jeffrey Richter就举例并“千方百计”的想实现下面的泛型方法来实现泛型类型变量作为操作数的通用解决方案:

 
01 internal static class UsingGenericTypeVariablesAsOperands
02 {
03     private static T Sum<T>(T num) where T : struct
04     {
05         T sum = default(T);
06         for (T n = default(T); n < num; n++)
07             sum += n;
08       
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,