DtlsTb.Rows[di]["VoucherType"] == dt2.Rows[i]["VoucherType"]
两个的类型都是int值都是21但是为什么比较结果却是false呢?但是如果类型是string的话结果又可以是true.高手解释下啊.

解决方案 »

  1.   

    Convert.ToInt32(DtlsTb.Rows[di]["VoucherType"]) == Convert.ToInt32(dt2.Rows[i]["VoucherType"] )
      

  2.   

    默认情况下,DataTable里储存的值都是Object引用类型的
    而Object默认比较时是引用比较
      

  3.   


    正解!  或者:
    DtlsTb.Rows[di]["VoucherType"].ToString() == dt2.Rows[i]["VoucherType"].ToString()
      

  4.   

    DtlsTb.Rows[di]["VoucherType"].ToString() == dt2.Rows[i]["VoucherType"].ToString()
      

  5.   

    你转换类型在比较,DtlsTb.Rows[di]["VoucherType"]是object类型,当然是false了,要拆箱
      

  6.   

    DtlsTb.Rows[di]["VoucherType"].ToString() == dt2.Rows[i]["VoucherType"].ToString()
    or
    Convert.ToInt32(DtlsTb.Rows[di]["VoucherType"]) == Convert.ToInt32(dt2.Rows[i]["VoucherType"] )
      

  7.   

    是2个object比较。
    =比较的是内存地址。
    比较引用类型没有意义
    所以要转化成值类型
      

  8.   

    DtlsTb.Rows[di]["VoucherType"].Equals(dt2.Rows[i]["VoucherType"])
      

  9.   

    需要转换成int型比较,开始是object类型的.
    int.parse