【问题标题】:Exception occuring while using T Field<T> in my code在我的代码中使用 T Field<T> 时发生异常
【发布时间】:2011-01-06 13:54:32
【问题描述】:

我在尝试使用此代码时收到 InvalidCastException。 我无法解决如何使用 Field. 请帮帮我

DataTable _Transaction= new DataTable();
float NetAmount=0;
//Records inserted into Table 

  for (int i = 0; i < _Transaction.Rows.Count; i++)
            {
                NetAmount += _Transaction.Rows[i].Field<object>("ItemAmount");
            }

编辑我实际上想从数据表中检索指定 columnName 和 Row no 的值。 _Transaction 是这里的表名

【问题讨论】:

  • 发生在哪里?什么是净额?为什么 Transaction 以下划线开头?
  • @zneak 我不太了解命名约定。我只是一个初学者。休息我已经提到了。如果你能给我提供.net中所有命名约定的链接,那就太好了
  • 提示:要遍历 DataTable 中的所有行,请使用 foreach:foreach (DataRow row in _Transaction { /* do something with row */ }。这比使用带索引的 for 循环稍微习惯用语(但它主要是一种风格——别担心,你的 for 循环仍然可以正常工作!)。
  • 这是一个相当常见的命名约定:irritatedvowel.com/Programming/Standards.aspx

标签: c# .net datatable dataset


【解决方案1】:

您需要将_Transaction.Rows[i].Field&lt;object&gt;("ItemAmount") 强制转换或转换为与NetAmount 相同的类型,以便+= 运算符将在单一类型上运行。

例如,如果 NetAmountdecimal 并且字段也是十进制,则使用 Field&lt;decimal&gt; 而不是 Field&lt;object&gt;。如果字段不是小数,请在其上使用Convert.ToDecimal

【讨论】:

  • @jball:我尝试将其转换为相同的类型,但当它不起作用时,我将其转换为更大的类型。
  • 行中的ItemAmount列有一个类型,我们不知道它是什么,但你知道;如果你提供那种类型,它会起作用,我保证。这就是你应该使用Field&lt;T&gt;的方式。
  • @Shantanu,我已经添加了对您拥有的两个选项的解释,正如 mquander 指出的那样,这取决于列的类型,并且您需要知道解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多