C#,如何将int的增量声明为对象?

时间:2013-04-17 12:39:21

标签: c# .net types casting

我有一个外部系统,它给我一个对象值(我知道这个值总是一个盒装整数类型)。我想以通常的方式递增它: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;

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

正如其他人所说,强制转换是处理被视为object的类型的正确方法。

然而,话虽如此,如果确实想要在没有编译时类型检查的情况下使用任意运算符和方法,您可以使用dynamic关键字:

dynamic targetInt = 100;
int incrementedValue = 20;

targetInt += incrementedValue;