C# 使用自定义的泛型函数/方法对泛型数组进行四则运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 使用自定义的泛型函数/方法对泛型数组进行四则运算相关的知识,希望对你有一定的参考价值。

例如,使用自定义的泛型方法求解泛型数组的和的问题。泛型的类型参数就是简单的int、float、double.C#中应该不支持直接在泛型参数调用算术运算。希望能够有代码说明

static void GetSum<T>(T[] a)
       
            if (a == null)
           
                Console.WriteLine("无意义");
                return;
           

            if (a is int[])
           
                int sum = 0;
                for (int i = 0; i < a.Length; i++)
               
                    sum += Convert.ToInt32(a[i]);
               
                Console.WriteLine(sum);
           
            else if (a is double[])
           
                double sum = 0;
                for (int i = 0; i < a.Length; i++)
               
                    sum += Convert.ToDouble(a[i]);
               
                Console.WriteLine(sum);
           
            else if (a is float[])
           
                float sum = 0;
                for (int i = 0; i < a.Length; i++)
               
                    sum += Convert.ToSingle(a[i]);
               
                Console.WriteLine(sum);
           
       

 //使用时:
int[] a = 1, 2, 3, 4 ;
             GetSum<int>(a);
             //本来是想返回T类型的 结果一直无法实现

参考技术A         static void Main(string[] args)
        
            Console.WriteLine(sum<int>(1, 2));
            Console.ReadLine();
        

        public static T sum<T>(T a, T b) where T : struct
        
            string ts = typeof(T).ToString();
            switch (ts.Substring(ts.LastIndexOf(".") + 1))
            
                case "Int32"://示例,只写了整数
                    
                        int sum = Convert.ToInt32(a) + Convert.ToInt32(b);
                        return (T)Convert.ChangeType(sum, typeof(T));
                    
                default://只是为了防止编译错误
                    

                        return (T)(new object());
                    
            
        

本回答被提问者和网友采纳
参考技术B static T Sum<T>(params T[] arrays) where T : struct
        
            if (arrays.Length > 0)
            
                dynamic sum = default(T);
                foreach (T memb in arrays)
                    sum += memb;
                return sum;
            
            else
                throw new System.IndexOutOfRangeException();
        

参考技术C dynamic动态类型

以上是关于C# 使用自定义的泛型函数/方法对泛型数组进行四则运算的主要内容,如果未能解决你的问题,请参考以下文章

(转)java 泛型详解-绝对是对泛型方法讲解最详细

让泛型的思维扎根在脑海——深刻理解泛型

C# 泛型方法约束为继承自某类时,调用方法,传子类实参,为什么报错?应该怎么写

泛型及java中的泛型

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一 (zhuan)

Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一