c#:将类型字符串列表转换为int时,输入的字符串格式错误

时间:2013-12-02 21:15:50

标签: c# sqlite

使用winforms,c#和sqlite

我试图使用以下内容将string类型的列表转换为int:

 List<int> ints = list2.ConvertAll<int>(int.Parse);

注意:在编写上面的代码之前,我在方法之外声明了列表,如下所示:

 List<int> ints = new List<int>();

我想使用此列表来填充sqlite中的列,如下所示:

 sqlite_cmd.CommandText = "CREATE TABLE IF NOT EXISTS 't2' (YYMM int32, MinDate int32, MaxDate int32, TotalTrans int32, DebitTrans int32, AMOUNTINDOCUMENTCURREN int32 );";

        sqlite_cmd.ExecuteNonQuery();

        sqlite_cmd.CommandText = " DELETE FROM t2";
        sqlite_cmd.ExecuteNonQuery();

        sqlite_cmd.CommandText = "INSERT INTO t2 (YYMM, MinDate, MaxDate, TotalTrans, DebitTrans, AMOUNTINDOCUMENTCURREN ) VALUES (@b1, @b2, @b3, @b4, @b5, @b6)";
        sqlite_cmd.Parameters.AddWithValue("@b1", 6);  // dummy initial values 
        sqlite_cmd.Parameters.AddWithValue("@b2", 878);
        sqlite_cmd.Parameters.AddWithValue("@b3", 56);
        sqlite_cmd.Parameters.AddWithValue("@b4", 6);
        sqlite_cmd.Parameters.AddWithValue("@b5", 546);
        sqlite_cmd.Parameters.AddWithValue("@b6", 565);

        for (int i = 0; i < NumList2Values; i += 6) // Filling SQlite table rows and columns with values from list2
        {
            sqlite_cmd.Parameters.AddWithValue("@b1", ints[i]);
            sqlite_cmd.Parameters.AddWithValue("@b2", ints[i + 1]);
            sqlite_cmd.Parameters.AddWithValue("@b3", ints[i + 2]);
            sqlite_cmd.Parameters.AddWithValue("@b4", ints[i + 3]);
            sqlite_cmd.Parameters.AddWithValue("@b5", ints[i + 4]);
            sqlite_cmd.Parameters.AddWithValue("@b6", ints[i + 5]);
            sqlite_cmd.ExecuteNonQuery();
        }

问题是编译程序时出现此错误:

enter image description here

3 个答案:

答案 0 :(得分:2)

您无法像这样使用ConvertAll。但你可以这样做:

list2.Select(s => int.Parse(s)).ToList();

这会给你一个List<int>

答案 1 :(得分:1)

一种方法是重新设计代码,以便您拥有整数值的列表

例如:

private void TestRoutine(List<string> section2, int[] pos2,
  int[] len2, string[] val2)
{
  var list2 = new List<int>();
  foreach (var line in section2)
  {
    for (int k = 0; k < 6; k++)
    {
      int numValue = 0;
      val2[k] = line.Substring(pos2[k], len2[k]);
      int.TryParse(val2[k], out numValue);
      list2.Add(numValue);
    }
  }
}

您还可以添加一些代码来检查并确保TryParse成功,然后再添加它。

答案 2 :(得分:0)

如果您想使用ConvertAll,请按以下步骤使用。{p>

List<int> ints = list2.ConvertAll(x => int.Parse(x));