简单的减法和演员问题

时间:2009-02-27 16:12:35

标签: c# casting

为什么这个简单的减法不起作用?

int MyPageNumber = Convert.ToInt32(cboPageNumber.SelectedItem);
MyPageNumber += (MyPageNumber - 1); //does not work
int MyNewPageNumber = MyPageNumber - 1; /works

我也希望有人能告诉我为什么这会给我一条“红线”而无法进行演员表演:

short MyPageNumber = Convert.ToInt16(cboPageNumber.SelectedItem);
MyPageNumber += MyPageNumber - ((short) 1); //does not work says can't cast

我不理解什么?是+在示例中将它变成一个字符串吗?

谢谢。

5 个答案:

答案 0 :(得分:11)

确切看看它的作用:

MyPageNumber += (MyPageNumber - 1); 

MyPageNumber-1添加到现有值。因此,如果MyPageNumber为5,那么最终会得到9而不是你想要的4。

现在针对第二个问题,你基本上得到了与此相当的情况:

short x = 5;
short y = 10;
short z = x - y;

看起来没问题,但是C#实际上没有针对短路的减法运算符 - 它只有整数,所以它隐含地将xy转换为int。结果也是int,您无法将其分配回z。你需要:

short z = (short) (x - y);

(或等同于您的真实变量名称)。

答案 1 :(得分:1)

定义“不起作用” - 对我来说似乎很好......特别是:

int MyPageNumber = Convert.ToInt32("3");
MyPageNumber += (MyPageNumber - 1); // 5 as expected

重新开始;由于CPU效率等原因,int中的所有short算术结果;尝试:

MyPageNumber += (short)(MyPageNumber - ((short)1));

答案 2 :(得分:0)

如果MyPageNumber等于3,则第一个等式产生5,第二个等式产生2。

此外,您不需要将1投射到短......投射是不必要的。

答案 3 :(得分:0)

MyPageNumber += (MyPageNumber - 1);

表示将MyPageNumber减少一个,然后将结果添加到MyPageNumber的旧值。

例如,如果MypageNumber为3:

3 + =(3 - 1)
3 + = 2
5

答案 4 :(得分:0)

你可以这样做:

short magicNumber=1;
MyPageNumber +=MyPageNumber-magicNumber;

您也可以

MyPageNumber += (short)(MyPageNumber-1);

请参阅此MSDN Article