需要在c#genericclass中添加2个数字
本文关键字:添加 2个 数字 c#genericclass | 更新日期: 2023-09-27 18:25:23
我有以下代码:
public T[] Plus<T>(T[] a, T[] b, int size)
{
T[] sum = new T[size];
for (int i = 0; i < size; i++)
{
sum[i] = a[i] + b[i];
}
return sum;
}
但它不起作用。如何计算"a"answers"b"数组?
p.S.T
可能仅为sbyte
int
uint
long
ulong
抱歉我英语不好。
这是一种可怕的方法,但它至少有效:
for (int i = 0; i < size; i++)
{
sum[i] = (dynamic)a[i] + (dynamic)b[i];
}
然而,它确实做了很多拳击和开箱的动作。如果你想要一个更好的版本,你可以通过重载来做得更好:
public static int[] Plus(int[] a, int[] b, int size)
{
int[] sum = new int[size];
for (int i = 0; i < size; i++)
{
sum[i] = a[i] + b[i];
}
return sum;
}
public static long[] Plus(long[] a, long[] b, int size)
{
long[] sum = new long[size];
for (int i = 0; i < size; i++)
{
sum[i] = a[i] + b[i];
}
return sum;
}
你仍然可以破解一个通用版本:
public static T[] Plus<T>(T[] a, T[] b, int size)
{
switch(Type.GetTypeCode(typeof(T)))
{
case TypeCode.Int32:
return (T[])(object)Plus((int[])(object)a, (int[])(object)b, size);
case TypeCode.Int64:
return (T[])(object)Plus((long[])(object)a, (long[])(object)b, size);
// ...etc
default:
throw new NotSupportedException();
}
}
要求a和b两个数组必须具有相同的类型。