2017-05-11 38 views
0

我試圖將Listbox中的所有值相加,其中Listbox由兩個其他列表框的值相乘。它基本上是一個Listbox的總和。C#無法將類型爲'TCSCapstone.frmInventory'的對象轉換爲鍵入'System.IConvertible'

我不斷收到一個錯誤,我查了一下,其他人也遇到類似問題。它與ToInt32ToString有關,我只是無法修復它。每當我點擊我的按鈕來加載執行該循環的Listbox,它會給我錯誤。

請幫助,這是我需要的一切。

  int i = 0, result = 0; 
     while (i < lstTotalPrices.Items.Count) 
     { 
      result += Convert.ToInt32(lstTotalPrices.Items[i++]); 
     } 

     txtTotal.Text = Convert.ToString(result); 
+0

您可以發佈確切的錯誤信息.. – Abi

+0

假設錯誤是與項目[I ++]在其上的線。你有沒有檢查過Item是否會返回你所期待的(從你的代碼中看起來你期待的是一個字符串)。現在不是說我不在我的手機上,也不能訪問編碼環境,但值得一試。 –

+0

@Andrew Harris我試了一下, lstTotalPrices.GetItemValue(lstTotalPrices.Items [i ++]); 而不是我原來的線,但我得到一個錯誤,說:'System.Windows.Forms.ListBox'不包含'GetItemValue'的定義,並沒有擴展方法...並且它繼續下去,也許我失蹤了一個程序集引用? –

回答

1

基於評論和聊天這應該工作:

int i = 0; 
decimal result = 0; 
while (i < lstTotalPrices.Items.Count) 
{ 
    result += ((frmInventory)lstTotalPrices.Items[i++]).TotalPrice; 
} 

雖然整潔的解決辦法是

int i = 0; 
decimal result = 0; 

foreach (var item in lstTotalPrices.Items) 
{ 
    result += item.TotalPrice; 
} 
+0

這是一個有效的工具!我稍後再嘗試第二個,再次感謝! –

0

貌似lstTotalPrices.Items[i++]是無法轉換爲使用Convert.ToInt32()因此,更好地將它們轉換爲字符串,然後將值傳遞到ToInt32()的整數,請嘗試以下操作:

result += Convert.ToInt32(lstTotalPrices.Items[i++].ToString()); 

您可以使用int.TryParse()爲此轉換,而不是Convert.ToInt32()

+0

我試着添加.ToString()到最後,它仍然給我確切的錯誤。然後我保留.ToString(),然後用int.TryParse()替換Convert.ToInt32,但它給了我一個錯誤:方法'TryParse'沒有重載需要1個參數。下面是我嘗試的確切的一行:result + = int.TryParse(lstTotalPrices.Items [i ++]。ToString()); –

+0

這錯過了Items []不返回值的地方,它返回了底層的List Item對象。 –

+0

通過'lstTotalPrices.Items [i ++]' –

相關問題