2017-05-11 42 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 ++]' –

相关问题