2011-02-13 50 views
1

我正在做一些班級的作業,並決定添加一些額外的東西,並最終讓我困惑了一下。我嘗試了各種比較方法,但他們都不起作用,但我不明白爲什麼。C#NET String.Compare問題

基本上,當一個訂單被添加到系統中時,它會創建一個類OrderInfo的實例,並將其添加到一個ArrayList。在我的代碼中,我使用foreach()循環來查找與它們單擊的列表框中的哪個條目相匹配的類實例,但有些錯誤。

private void ordersListBox_DoubleClick(object sender, EventArgs e) 
{ 
    if (ordersListBox.SelectedItem != null) 
    { 
     foreach (OrderInfo i in ordersList) 
     { 
      if (String.Compare(i.GetClientName(), ordersListBox.ToString(), true) == 0) 
      { 
       MessageBox.Show(i.GetClientName()); 
       break; 
      } 
     } 
    } 
} 
+0

你真的指的是ordersListBox.ToString()嗎?默認情況下,這不會返回所選項目的文本。 – Jimmy 2011-02-13 21:28:48

回答

4

而不是

if (String.Compare(i.GetClientName(), ordersListBox.ToString(), true) == 0) 

嘗試

if (String.Compare(i.GetClientName(), ordersListBox.SelectedValue.ToString(), true) == 0) 
+0

這是.SelectedItem.ToString()但足夠接近,謝謝! – 2011-02-13 21:29:45

0

對於字符串比較,最好使用Equals()方法。

private void ordersListBox_DoubleClick(object sender, EventArgs e) 
{ 
    if (ordersListBox.SelectedItem != null) 
    { 
     foreach (OrderInfo i in ordersList) 
     { 
      if (i.GetClientName().Equals(ordersListBox.ToString())) 
      { 
       MessageBox.Show(i.GetClientName()); 
       break; 
      } 
     } 
    } 
} 
0

String.Compare返回一個數字,而不是布爾值。
該數字將爲正數,負數或零,具體取決於字符串的相對字母順序。您可以撥打String.Equals,並通過StringComparison.OrdinalIgnoreCase

0

我懷疑你真的想在ordersListBox的字符串表示比較明智的一些字符串。

的默認實現ToString()的任何對象都是輸出實例類型的名稱。 ordersListbox最有可能是這樣做的。您需要諮詢SelectedValue。

0

你也可以試試這個。

if (String.Compare(i.GetClientName(), ordersListBox.SelectedValue.ToString(), StringComparison.InvariantCultureIgnoreCase) == 0) 
     { 
      MessageBox.Show(i.GetClientName()); 
      break; 
     }