在我的代码中,我有以下代码:
Order = config.DeploymentSteps.Select(x => x.Order).DefaultIfEmpty().Max() + 1;
Run Code Online (Sandbox Code Playgroud)
这给了我错误Cannot implicitly convert type 'int' to 'short'.作为参考Order,x.Order并且都是短裤,并Max()正确返回short(我已经验证了这一点).所以我明白了,它认为这1是一个integer错误的.所以我改成了:
Order = config.DeploymentSteps.Select(x => x.Order).DefaultIfEmpty().Max() + (short)1;
Run Code Online (Sandbox Code Playgroud)
我现在仍然得到相同的编译.所以也许它不是正确的,所以我尝试将它改为
Order = config.DeploymentSteps.Select(x => x.Order).DefaultIfEmpty().Max() + Convert.ToInt16(1);
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.最后我通过转换整个表达式来实现它:
Order = Convert.ToInt16(config.DeploymentSteps.Select(x => x.Order).DefaultIfEmpty().Max() + 1);
Run Code Online (Sandbox Code Playgroud)
为什么我不能将1转换为a short并将其添加到另一个short中,而不是将整个东西抛出来?
这是因为short + short = int.
Eric Lippert 在这里解释道.
他说:
为什么短而短的结果是int?
好吧,假设空头和空头很短,看看会发生什么:
short [] price = {10000,15000,11000}; 短期平均=(价格[0] +价格[1] +价格[2])/ 3; 当然,如果这个计算是短暂的,那么平均值是-9845.总和大于最大可能的短,所以它包围负数,然后你除负数.
在整数运算环绕的世界中,在int中进行所有计算更为明智,这种类型可能具有足够的范围以使典型计算不溢出.
| 归档时间: |
|
| 查看次数: |
1418 次 |
| 最近记录: |