首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

泛型约束有关问题

2013-03-01 
泛型约束问题/// summary/// 累加数组中所有数字/// /summary/// typeparam nameT所有数字类型/

泛型约束问题
        /// <summary>
        /// 累加数组中所有数字
        /// </summary>
        /// <typeparam name="T">所有数字类型</typeparam>
        /// <param name="a">数组</param>
        /// <returns>数字</returns>
        public static double Sum<T>(T[] a) where T : sbyte, byte, short, ushort, int, uint, long, ulong, float, double {
            double s = 0;
            for (int i = 0; i < a.Length; i++) {
                s += Double.Parse( a[i].ToString());
                
            }
            return s;
        }

错误  “sbyte”不是有效的约束。作为约束使用的类型必须是接口、非密封类或类型形参。

我想对这个约束为数字怎么写?
[解决办法]
约束不能指定为int、double这种,按你的需求,只能写成
public static double Sum<T>(T[] a) where T : struct
[解决办法]
        public static double Sum<T>(T[] a) where T : struct
        {
            double s = 0;
            for (int i = 0; i < a.Length; i++)
            {
                ValueType value = a[i] as ValueType;
                if (value != null && (value is Byte 
[解决办法]

               value is Int16 
[解决办法]

               value is Int32 
[解决办法]

               value is Int64 
[解决办法]

               value is SByte 
[解决办法]

               value is UInt16 


[解决办法]

               value is UInt32 
[解决办法]

               value is UInt64 
[解决办法]

               value is Decimal 
[解决办法]

               value is Double 
[解决办法]

               value is Single))
                {
                    s += Double.Parse(a[i].ToString());
                }
            }
            return s;
        }
[解决办法]

引用:
引用:属于重复制造车轮问题。。建议直接用系统的sum

var sum = arr.Sum(m => (double)m);
这不是我的本意。是在练习怎么用C#中的泛型随便写的,与Sum函数本身其实是无关的。


引用:泛型约束不能解决所有的问题。这也不怪你,事实上,在弱类型的动态语言中,根本就没有这……

别找了,没有的。不过你可以用 IConvertable,你说的这些都支持 IConvertable

热点排行