条件为真,if语句为何不执行?

lwtzxsl 2017-02-10 06:47:33

public static void Check(DataTable _tb)
{
HttpContext.Current.Session["ID"]=_tb.Rows[0]["ID"].ToString();
HttpContext.Current.Session["NAME"]=_tb.Rows[0]["NAME"].ToString();
HttpContext.Current.Session["USERID"]=_tb.Rows[0]["USERID"].ToString();
HttpContext.Current.Session["TYPE"]=_tb.Rows[0]["TYPE"].ToString();

if(_tb.Rows[0]["TYPE"].ToString()=="预览")
{
HttpContext.Current.Session["TYPE"]="0001”;
}

}


现在问题就是进不去上面的 if语句,条件完全没有问题,调试过程中,对_tb.Rows[0]["TYPE"].ToString()监视没有问题,对_tb.Rows[0]["TYPE"].ToString()=="预览"的监视也为true,也没有问题,就是进不去if执行语句。
以前执行的时候没有问题,以前的操作系统为win7 32位,刚换了系统win7 64位 出现了这个问题,求教,如何解决这个问题?
谢谢!
...全文
6094 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2017-02-22
  • 打赏
  • 举报
回复
建议lz把

_tb.Rows[0]["TYPE"].ToString();
这句先输出,确定条件是否满足
token不能为空 2017-02-21
  • 打赏
  • 举报
回复
想起了以前用火狐的firebug调试js时候 if(fasle) { //可以进到这里,很绝望 }
卡索瓦 2017-02-21
  • 打赏
  • 举报
回复 1
有这种情况,你考虑下:应该是调试进程没有杀死,调试启动后走的旧程序流程,你把VS重启一下,或者清理一下项目,再调试看看
lwtzxsl 2017-02-20
  • 打赏
  • 举报
回复 1
引用 7 楼 z392587086 的回复:
断点打在第9行能进去吗?
不进,直接跳过
引用 14 楼 sp1234 的回复:
另外,不要滥用 object 类型,要用强类型编程。例如上面的代码,一个好的程序员会写
var xx = (string) _tb.Rows[0]["TYPE"];
if( xx =="预览")
{
    HttpContext.Current.Session["TYPE"]="0001”;
}
我就知道这个程序员是信心满满的程序员。 而写 ToString,虽然不好判断,但是我们见过太多的程序员胡乱用它,根本不好确定这样的程序员是心里知道 object 的实际类型是 string 还是别的什么。 滥用 ToString 的人有一个歪理,就是说“ToString不容易出错”。实际上这是品质问题,好的程序员的代码经过几十万次自动化测试,或者几千次手工测试,他绝不会用 ToString 来掩盖错误!(而是尽可能早地让错误跳出来)
感谢大神的回复,我已经等大神您好久了,,我已经按照你的代码改了,但是还是不执行花括号里面的语句,而是在if语句后直接跳走,花括号那一行也不执行,我之前用的X86的win7 没有问题,可以执行,现在换成了64位的系统,就出现了问题,我的两个同事,同样的代码,一个64位win7 ,一个是X86的win7 ,就是64位系统的同事和我一样的问题,另外一个x86系统的没有问题,我怀疑是不是系统的问题啊,为什么呢。
  • 打赏
  • 举报
回复
你把调试的目标改为要去调试 xx 变量,看看你的编译器、调试器还正常不正常?
lkw5657 2017-02-20
  • 打赏
  • 举报
回复
没有equal么
卧_槽 2017-02-20
  • 打赏
  • 举报
回复
先把条件去了,看看执行了没
  • 打赏
  • 举报
回复
引用 9 楼 crystal_lz 的回复:
先看看 Length 是否是 2 再说。。
lz 如果说“监视也为true”,那就只能改变源代码,才能看出问题。
  • 打赏
  • 举报
回复
另外,不要滥用 object 类型,要用强类型编程。例如上面的代码,一个好的程序员会写
var xx = (string) _tb.Rows[0]["TYPE"];
if( xx =="预览")
{
    HttpContext.Current.Session["TYPE"]="0001”;
}
我就知道这个程序员是信心满满的程序员。 而写 ToString,虽然不好判断,但是我们见过太多的程序员胡乱用它,根本不好确定这样的程序员是心里知道 object 的实际类型是 string 还是别的什么。 滥用 ToString 的人有一个歪理,就是说“ToString不容易出错”。实际上这是品质问题,好的程序员的代码经过几十万次自动化测试,或者几千次手工测试,他绝不会用 ToString 来掩盖错误!(而是尽可能早地让错误跳出来)
  • 打赏
  • 举报
回复
改成
var xx = _tb.Rows[0]["TYPE"].ToString();
if( xx =="预览")
{
    HttpContext.Current.Session["TYPE"]="0001”;
}
重新调试吧。
lwtzxsl 2017-02-20
  • 打赏
  • 举报
回复
引用 6 楼 xiaouncle 的回复:
既然if语句没有执行,那么判断结果就肯定不是true,你可以看一下等号两边的值分别是什么
判断结果是true
lwtzxsl 2017-02-20
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
重新编译,重新启动调试。 再试试看。 总觉得可能是浏览器缓存和本地修改后的代码,不匹配。
试过了,没用
lwtzxsl 2017-02-20
  • 打赏
  • 举报
回复
引用 4 楼 johnliuyuan 的回复:
[quote=引用 3 楼 shingoscar 的回复:] [quote=引用 楼主 icefire5100 的回复:] 就是进不去if执行语句
怎么判断的?[/quote] 就是啊,怎么判断没进去,加了断点了吗?[/quote] 断点后 条件为真,true,然而并不执行。
疏可跑马 2017-02-20
  • 打赏
  • 举报
回复
引用 22 楼 qq_25095899 的回复:
你换个思路吧...。
对,可以试一试:数据库里查出来就要能用。 而不是纠结在C#端完成SQL的工作。
大然然 2017-02-20
  • 打赏
  • 举报
回复
你换个思路吧,你的_tb多半是数据库里查出来的吧? 如果是的话在查询TYPE字段的时候,你case when一下,让他预览的时候就返回0001,不是预览的时候返回其他值。。。。。,然后你前台就不用这个判断了。
  • 打赏
  • 举报
回复
不管结果,不管调试有没有“进入花括号”里边,就是把源代码修改了之后,要看看新增加的变量能不能调试。
  • 打赏
  • 举报
回复
引用 19 楼 icefire5100 的回复:
但是还是不执行花括号里面的语句,而是在if语句后直接跳走,花括号那一行也不执行,我之前用的X86的win7 没有问题,可以执行,现在换成了64位的系统,就出现了问题,我的两个同事,同样的代码,一个64位win7 ,一个是X86的win7 ,就是64位系统的同事和我一样的问题,另外一个x86系统的没有问题,我怀疑是不是系统的问题啊,为什么呢。
在 64 位系统,你有没有调试到 xx 变量,值对不对?如果调试不到,说明你的 DLL、EXE 跟源代码根本不符。 我开发调试时只用 64 位机器,没遇到过你说的这种情况。
crystal_lz 2017-02-14
  • 打赏
  • 举报
回复
先看看 Length 是否是 2 再说。。
正怒月神 2017-02-13
  • 打赏
  • 举报
回复
重新编译,重新启动调试。 再试试看。 总觉得可能是浏览器缓存和本地修改后的代码,不匹配。
z392587086 2017-02-13
  • 打赏
  • 举报
回复
断点打在第9行能进去吗?
加载更多回复(6)

111,085

社区成员

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

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

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