问题描述
这个项目我调试跟踪了,发现在这个值班的判断里面,workQuery没有加上去,本来等于号后面的workQuery数值为8,queryList[i].WorkHours(医值,加班时间为8)有值,值为8,结果到下一局上面的workQuery值还是为8,不是16workQuery+queryList[i].WorkHours=16.0,这是调试的信息明明调试上都看出来不等于了,结果通过了单步调试floatworkQuery=0;值的定义varqueryList=(fromlinlistQuerywherel.ListType==0&&l.StaffSysId==dr["SysId"].ToString()selectl).ToList();queryList是linq查到的集合等于号左边的workQuery一直是8右边的workQuery是8,后面的queryList[i].WorkHours值也是8所以运行之后左边的workQuery就应该为16了结果还是8这种问题应该怎么破啊。。。。
解决方案
解决方案二:
把这句queryList[i].WorkHours重新赋值一个变量重新与workQuery相加。试试
解决方案三:
你确定workQuery这个变量没有在别的地方重新赋值?要看看你这个变量的作用域。。。
解决方案四:
引用2楼zifengshen1981的回复:
你确定workQuery这个变量没有在别的地方重新赋值?要看看你这个变量的作用域。。。
for(inti=0;i<queryList.Count;i++){//在这个循环里定义了这个workQuery变量,每找一天上班时间就看这一天的正常工时是多少,然后赋值给workQuery,//然后判断他这天是否值班,值班了就在workQuery上加上值班班时。就是加不上,不知道什么情况//变量的作用域?floatworkQuery=0;if(query!=null){workQuery=query.WorkHours;}//得到正常工时if(queryList[i].SchedulingType=="1")//值班{workQuery=workQuery+queryList[i].WorkHours;//正常上班8个工时qianxiu=qianxiu+8;//欠休8个工时//workQuery=workQuery+8;//z加上pingrizhiban++;}}
解决方案五:
结果到下一局上面的workQuery值还是为8,不是16。这个没问题,因为你每次循环,只要query不为null,workQuery都会被重新赋值,不再是上一次的值(16);如果query=null。那么workQuery就是0.
解决方案六:
在循环中,你没改变query对象属性值。
解决方案七:
floatworkQuery=0;值的定义这玩意在哪里定义的,是全局变量还是局部变量?不要只会F5执行到断点一步一步跟,你就自然就能跟出问题来了
解决方案八:
还有什么叫"下一局",这说法也太不专业了吧如果你是把程序关了重新打开计算,它能记住之前的值才怪
解决方案九:
右键,查找所有引用,看到底都有哪里给它赋值了是否使用了多线程,或者timer,在你调试这段代码的时候,其他代码还在运行(而没有停止),导致在调试器里看到的值是不正确的
解决方案十:
难怪了,你应该把这个变量放到循环外面。不然每次循环这个变量又从0开始了。。。