为什么这个简单的减法不起作用?
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
我不理解什么?是+在示例中将它变成一个字符串吗?
谢谢。
答案 0 :(得分:11)
确切看看它的作用:
MyPageNumber += (MyPageNumber - 1);
将 MyPageNumber-1添加到现有值。因此,如果MyPageNumber为5,那么最终会得到9而不是你想要的4。
现在针对第二个问题,你基本上得到了与此相当的情况:
short x = 5;
short y = 10;
short z = x - y;
看起来没问题,但是C#实际上没有针对短路的减法运算符 - 它只有整数,所以它隐含地将x
和y
转换为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