如何解决在条件中使用按位运算符-无法将类型'int'隐式转换为'bool'
我编写了以下代码,该代码使用bitField
变量作为字符映射来检查字符在给定字符串中的存在情况
public static bool AllElementsUniqueInASCIIString(string str) {
int bitField = 0;
foreach (int character in str) {
int idx = character - 'a';
int mask = 1 << idx;
if (bitField | mask == 1)
return false;
else
bitField &= mask;
}
return true;
}
问题是,在表达式if (bitField | mask == 1)
上,在编译时引发了以下错误:
CS0029:无法将类型'int'隐式转换为'bool'
但是,当我用以下代码片段替换此行时,代码可以正常编译:
int present = bitField | mask;
if (present == 1)
bitField
和mask
都是整数,那么这个编译错误是怎么回事?我应该使用哪种语法来一次检查这种情况?
解决方法
您将需要使用括号来明确表达您的意图
if ((bitField | mask) == 1)
编译器认为您要执行以下操作(由于运算符的优先级)
if (bitField | (mask == 1))
int | bool
错误告诉你的是什么
CS0019运算符'|'不能应用于类型为'int'的操作数,并且 '布尔'
简而言之,相等运算符的优先级高于布尔逻辑或或按位逻辑或的运算符
其他资源
在具有多个运算符的表达式中,具有较高运算符的运算符 优先级先于优先级较低的运算符
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。