需要在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抱歉我英语不好。

需要在c#genericclass中添加2个数字

这是一种可怕的方法,但它至少有效:

    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两个数组必须具有相同的类型。