读书人

泛型约束有关问题

发布时间: 2013-03-01 18:33:02 作者: rapoo

泛型约束问题
/// <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

读书人网 >C#

热点推荐