3

我有一个外部系统,它给了我一个对象值(我知道这个值总是一个装箱的整数类型)。我想以通常的方式增加它:int value += otherIntValue,但我从编译器得到一个错误:

运算符“+=”不能应用于类型的操作数

例如:

//source values i cannot to change it
object targetInt = 100;
int incrementedValue = 20;

//usual way - not works
targetInt += incrementedValue;    

//ugly workaround
targetInt = ((int) targetInt) + incrementedValue;

有没有办法增加 int 和 object 的实例targetInt += incrementedValue;

4

3 回答 3

6

只是不要更改您的代码。将您object转换为整数是非常好的,因此可以使用另一个整数进行加法。

于 2013-04-17T12:47:16.587 回答
0

只是为了它,这是一种通过运算符重载来实现的方法。你一定很讨厌铸造操作员......

targetInt += (Int)incrementedValue;

public class Int
{
    private int _value;

    public Int(int value)
    {
        _value = value;
    }

    public static implicit operator Int(int value)
    {
        return new Int(value);
    }

    public static object operator +(object target, Int increment)
    {
        return increment._value + (int)target;
    }
}
于 2013-04-17T13:11:30.830 回答
0

正如其他人所说,强制转换是处理被视为object.

但是,话虽如此,如果您真的想使用任意运算符和方法而不进行编译时类型检查,则可以使用dynamic关键字:

dynamic targetInt = 100;
int incrementedValue = 20;

targetInt += incrementedValue;
于 2013-04-17T13:20:03.930 回答