C#不让我把两个short加到一个short我有一个代码:staticshortSum(shorta,shortb){returna+b;它没有编译,saynig无法将“int”转换为“short”。我今天可能真的很累,但我没有看到问题!而且它无法编译,saynig无法将“int”转换为“short”。我今天可能真的很累,但我没有看到问题!语言就是这样定义的。整数类型的+运算符定义为:staticuintop+(uintx,uinty)staticintop+(intx,inty)staticulongop+(ulongx,ulongy)staticlongop+(longx,longy)根据需要提升操作数。现在,为什么它是这样定义的——老实说,我不知道。我不赞成“因为它可能溢出”的论点——它建议将byte+byte定义为返回short,将int+int定义为返回long,这两者都不是真的。我听说这可能与性能有关,但我不想肯定地说。(也许处理器通常只提供32位和64位整数的整数运算?)不管怎样,情况并非如此——这只是语言的规则。请注意,复合赋值运算符隐式转换回关联类型,因此您可以编写:shortx=10;短y=20;x+=y;当你把两个short加在一起,它们加起来可以超过Short值是允许的,但是int值是可以的。这正是EricLippert在他的回答中所说的。旁白:为什么不添加两个returnlongint?Eric还解决了这个问题:在一个被整数运算包围的世界中,在int中进行所有计算更为明智,这种类型可能具有足够的范围,典型的计算不会溢出。所以在添加两个short时定义的+运算符返回一个int。这就是你得到编译时错误的原因——你返回一个指定短返回类型的int。如果您知道添加总是会导致短路,您可以显式地将结果转换为短路:staticshortSum(shorta,shortb){return(short)(a+b);}JonSkeet详细解释了为什么你的代码不起作用,但他没有列出你需要做什么来编译它。可以使用以下内容:以上是C#学习教程:C#不让我加两篇短篇分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多指教}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
