繁体   English   中英

c#:将字符串类型列表转换为int时,输入字符串格式不正确

[英]c#: Input string not in correct format error when converting list of type string to int

使用winforms,c#和sqlite

我试图使用以下命令将字符串类型的列表转换为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();
        }

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

在此处输入图片说明

您将无法像那样使用ConvertAll 但是您可以这样做:

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

这会给你一个List<int>

一种方法是重新设计代码,以便获得数值列表

例如:

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在添加之前成功。

如果要使用ConvertAll ,请按以下方法使用它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM