0

エラーが発生するのはなぜですかInput string was not in a correct format。私のコードのこの行で?

Convert.ToInt32(listView1.Items[4].SubItems[4].ToString())

以下は、私が使用している完全なコードです。

foreach (ListViewItem iiii in listView1.Items)
{
    if (Convert.ToInt32(listView1.Items[4].SubItems[4].ToString()) <= Convert.ToInt32(tenthousand.ToString()))
    {
        message2 = "GREAT";
        msgColor2 = System.Drawing.Color.Green;
        break;   // no need to check any more items - we have a match!
    }

    labelVideoViews2.Text = message2;
    labelVideoViews2.ForeColor = msgColor2;
}
4

3 に答える 3

0

整数を文字列に変換して解析し直す必要はないと思います。

Convert.ToInt32(tenthousand.ToString())

また、すべてのアイテムを列挙していますが、使用しているのは1つだけlistView1.Items[4]です。これは間違いだと思います。そして、Int32.TryParse例外の解析を回避するために使用します。

foreach (ListViewItem iiii in listView1.Items)
{
     int value;
     string text = iiii.SubItems[4].ToString();
     if (!Int32.TryParse(text, out value))
     {
         MessageBox.Show(String.Format("Cannot parse text '{0}'", text));
         continue; // not number was in listview, continue or break
     }

     if (value <= tenthousand)
     {
          labelVideoViews2.Text = "GREAT";
          labelVideoViews2.ForeColor = Color.Green;
          break;
     }
}
于 2012-12-01T22:01:51.790 に答える
0

Convert.ToInt32数値ではない文字列をメソッドに渡すと、メソッドはこの例外をスローします。

この例外は、値が一連の数字 (0 ~ 9) に続くオプションの記号で構成されていない場合にスローされます。そのため、文字列値listView1.Items[4].SubItems[4].ToString()が有効な数値であり、先頭に 0 ~ 9 の数字とオプションの記号のみが含まれていることを確認してください。

int.TryParseまたは、例外をスローしないメソッドを使用できます。

int result;
if (int.tryParse(listView1.Items[4].SubItems[4].ToString(), out result))
{
    // the value was successfully parsed to an integer => use the result variable here
}
else
{
   // the supplied value was not a valid number
}
于 2012-12-01T21:55:11.770 に答える
0

intほとんどの場合、文字列には文字やドット以外の文字が含まれています

convert を実行する前にアプリをデバッグし、それが実際に数値のみであることを確認してください

listView1.Items[4].SubItems[4].ToString()
于 2012-12-01T21:56:02.000 に答える