2015-06-18 9 views
0

Я видел много вопросов здесь о строках, которые равны, возвращающиеся как неравные, но поверьте мне, чтобы не получить эту проблему.String.compare возвращает true, когда строки не равны?

У меня есть эта функция.

Protected Sub ChkValidStockCode() 
    If Not (Voucher.ValidStockCode = "") Then 
     Dim validcount As Int32 = 0 
     Dim validproduct As String = Product.GetProductNameByCode(Voucher.ValidStockCode) 
     For Each rpi As RepeaterItem In rptCart.Items 
      Dim ProductID As HyperLink = CType(rpi.FindControl("hlProductID"), HyperLink) 
      Dim ProductName As HyperLink = CType(rpi.FindControl("hlProductName"), HyperLink) 
      If (String.Compare(Voucher.ValidStockCode.ToString(), ProductID.ToString())) Then 
       validcount = validcount + 1 
      End If 
     Next 

     If validcount = 0 Then 
      txtVoucher.Text = "Sorry, this voucher is only valid when purchasing a " & validproduct 
      failed = True 
      Exit Sub 
     End If 
    End If 

End Sub 

Он должен сравнить две строки и приращение в validcount целого числа, если они равны, а затем сказать вам, если бы он дойдет до конца повторителя, не находя никаких совпадений.

Переменные в этом тесте LT00004 (Voucher.ValidStockCode) и SP08076 (ProductID.ToString())

Я запустить код несколько раз, выводя разные строки в качестве результата и может подтвердить, что они являются то, что они должны быть, но когда я пытаюсь их сравнить (и я ожидаю, что validCount будет равен 0), они возвращаются в качестве соответствия.

Что я сделал, чтобы испортить это?

ответ

4

Возможно, вы захотите String.Equals(), а не String.Compare(). Compare используется для заказа вещей, а не для проверки равенства. Что происходит String.Compare возвращает ненулевое число, поэтому условие выполняется. Причина этого в том, что в VB «0» есть False, но любое ненулевое число оценивается как true. Есть целая история, почему это так, но я отвлекся.

+1

@ChrisHinton - Включите 'Option Strict', и вы сразу увидели бы ошибку. –

Смежные вопросы