【问题标题】:DataTable c# "Specified cast is not valid" errorDataTable c#“指定的转换无效”错误
【发布时间】:2018-02-08 05:12:02
【问题描述】:

我必须对DataTable 中特定列的整数值求和。

我做了什么:

DataTable dt = GetFilledDataTable();
foreach( var x in dt.AsEnumerable() )
{
   z+=(int)x["ColumnName"];
}

我得到错误:

指定的演员表无效

我完全确定,x["ColumnName"] 中的值是 1445

解决方案

正如@stuartd 在他的评论中建议的那样,我使用了int.Parse(x["columnName"].ToString())

【问题讨论】:

  • 但是你完全确定 '1445' 是一个 int 吗?
  • 你试过 int.parse(x["ColumnName"]) 吗?
  • int.Parse(x["columnName"].ToString()) 甚至
  • @Jaroslaw BTW,因为您使用的是 Linq to DataSet,所以您不使用 x.Field<int>("ColumnName")
  • @auburg erm,ToString()int.Parse(…) 内 - int.Parse 将字符串作为参数,而 DataRow 上的索引器 returns an object)。所以OP需要在x["ColumnName"]返回的对象上调用ToString()才能使用int.Parse

标签: c# .net datatable runtime-error


【解决方案1】:

您可以遍历行,然后使用通用 Field 方法:

DataTable dt = new DataTable();

foreach (DataRow dataRow in dt.Rows)
{
   var value = dataRow.Field<int>("ColumnName");
}

【讨论】:

    【解决方案2】:

    只需使用Convert.ToInt32 而不是类型转换:

    DataTable dt = GetFilledDataTable();
    foreach( var x in dt.AsEnumerable() )
    {
       z+=Convert.ToInt32(x["ColumnName"]);
    }
    

    如果您的值真的是int,这将很快奏效,如果是uint,则执行必要的转换,如果是string,则进行解析。

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2014-07-19
      相关资源
      最近更新 更多