1
using System.Collections;
using System;

public class Counter<T>
{
    private int pivot = 0;
    private readonly int arraySize = 256;
    private bool startCheck = false;

    T[] baskets;

    public T Count
    {
        get
        {
            return baskets[pivot];
        }
    }

    public void CountPlus(T plusValue)
    {
        if(!startCheck)
        {
            startCheck = true;

            baskets[pivot] = plusValue;
        }
        else
        {
            int previousPivot = pivot;

            pivot++;

            if( previousPivot == arraySize - 1 )
            {
                pivot = 0;
            }

            checked
            {
                try
                {
                    baskets[pivot] = baskets[previousPivot] + plusValue;
                }
                catch(OverflowException ofe)
                {
                    Debug.Log("=*=*=*=*=*=*=*=*= OverflowException =*=*=*=*=*=*=*=*=*=");
                }
            }

        }
    }
}

你好~

我想运行这段代码,但我收到一条错误消息

error CS0019: Operator '+' cannot be applied to operands of type 'T' and 'T'

我该如何解决这个错误?

4

3 回答 3

1

您可以使用动态:

dynamic o1 = baskets[previousPivot];
dynamic o2 = plusValue;
baskets[pivot] = o1 + o2;

然后像这样的代码工作:

Counter<int> intCounter = new Counter<int>();
intCounter.CountPlus(3);
intCounter.CountPlus(5);

Counter<double> doubleCounter = new Counter<double>();
doubleCounter.CountPlus(2.1);
doubleCounter.CountPlus(3.8);
于 2013-10-30T05:31:08.863 回答
0

如果您确定它T始终是一个 int,请将您的T转换为一个 int。

baskets[pivot] = ((int)baskets[previousPivot]) + (int)plusValue;

但是,如果T总是将是一个 int,那么让它泛型没有多大意义。

于 2013-10-30T05:19:17.553 回答
-1

有一个通用运算符

于 2013-10-30T05:26:54.213 回答