【问题标题】:Need to add 2 number in c# genericclass需要在 c# genericclass 中添加 2 个数字
【发布时间】:2014-10-03 18:39:48
【问题描述】:

我有以下代码:

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”和“b”数组?

附: T 可能只有 sbyte int uint long ulong 对不起我的英语不好。

【问题讨论】:

标签: c# generics


【解决方案1】:

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

    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();
    }
}

【讨论】:

  • 感谢您的详细解答。
【解决方案2】:

要求 a 和 b 两个数组必须是同一类型。

【讨论】:

  • 本例中ab属于类型;他们都是T[]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
相关资源
最近更新 更多