关于&&和&的疑难杂症

a220315410 2010-08-06 04:23:17
今天在看书《图形用户界面测试自动化》的时候,看到一段很古怪的代码:
private static GUIInfoType GetGUIInfoType(string winText, string winClass, string winTextParent)
{
if (winText != "" && winClass != "" & winTextParent == "")
return GUIInfoType.guiTextClass;
else if (winText != "" && winClass == "" & winTextParent != "")
return GUIInfoType.guiTextParent;
else if (winText != "" && winClass != "" & winTextParent == "")
return GUIInfoType.guiTextClassParent;
else if (winText == "" && winClass != "" & winTextParent != "")
return GUIInfoType.guiClassParent;
return GUIInfoType.guiText;
}
首先是 && 和 & 混着用,让我很奇怪,我以前一般都只用&&的,老师教这个运算符的时候说&& 支持短路计算性能比较好。

这里使用&应只能起到改变执行顺序的效果,if判断的结果应该是一样的吧?我曾今一度以为作者不小心敲错了。

但是,为什么第一个if和第三个if为什么是完全一样的啊,如果按照我的理解的话,这个函数永远不可能返回GUIInfoType.guiTextClassParent了,难不成&有什么我不知道的神奇作用?

希望哪位大哥能告诉我&神奇在哪里,不然我只能理解为代码出错了。
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a220315410 2010-08-09
  • 打赏
  • 举报
回复
多谢大家的指教~
moonteeth1991 2010-08-07
  • 打赏
  • 举报
回复
一个 布尔运算 一个位运算 很容易区分的 ~~~
qldsrx 2010-08-07
  • 打赏
  • 举报
回复
第三行显然应该是else if (winText != "" && winClass != "" & winTextParent != "")
你问我为什么会知道?这个简单,找规律啊,从return的返回属性名可以看出,不为空的就会放进去,这里返回GUIInfoType.guiTextClassParent,说明Text、Class、Parent三者都不为空。
jianuMan 2010-08-07
  • 打赏
  • 举报
回复
一个 布尔运算 一个位运算 很容易区分的
jointan 2010-08-06
  • 打赏
  • 举报
回复
第三行肯定是印刷的时候印错了
Peter200694013 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
http://zhidao.baidu.com/question/145009885.html?push=ql
http://www.cnblogs.com/chinafine/archive/2009/02/17/1392309.html
search by google

& 是位运算
&&是逻辑运算

都叫做“与”。

尽量不要在if中使用&……
[/Quote]
up...


Int32 i = 0;
if (3 / 2 == 0 && 3 / i == 1) //3/i不会判断,因为前边3 / 2 == 0不成立
Console.WriteLine("&&");
else
Console.WriteLine("else &&"); //output

if (3 / 2 == 1 & 3 / i == 1) //异常
Console.WriteLine("&");
兔子-顾问 2010-08-06
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/145009885.html?push=ql
http://www.cnblogs.com/chinafine/archive/2009/02/17/1392309.html
search by google

& 是位运算
&&是逻辑运算

都叫做“与”。

尽量不要在if中使用&。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧