我似乎无法摆脱以下代码行的警告:
d.word[wrdIndex++] = d.GetWord(english) | (ulong)i;
警告适用于赋值运算符之后的代码。 GetWord 方法返回一个 ulong。我尝试了以下无济于事:
d.word[wrdIndex++] = (d.GetWord(english) | (ulong)i);
d.word[wrdIndex++] = d.GetWord(english) | ((ulong)i);
d.word[wrdIndex++] = ((ulong)d.GetWord(english)) | ((ulong)i);
有人有什么想法吗?
最佳答案
更新:这个问题是my blog on Monday November 29th 2010的主题.
谢谢你的好问题!
您可以通过首先考虑警告并确定编译器是否正确首先将问题引起您的注意来消除警告! 您实际上是否会从按位得到不正确的结果,或者从有符号类型到更大的无符号类型的转换是否应该对整数进行符号扩展?
如果答案是是,那么您的解决方案是错误的。不要通过欺骗编译器在不给你警告的情况下继续做错误的事情来消除警告。通过做正确的事情消除警告:不要使用对整数进行符号扩展的转换。
如果答案是否,而您想要符号扩展,那么您的解决方案或 Hans Passant 的解决方案是正确的。但是,我会在代码中对此效果进行注释,因为就目前而言,很难看出符号扩展是可取的。
关于c# - 如何抑制 C# 警告 CS0675 : Bitwise-or operator used on a sign-extended operand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058960/