2

基本上我有一个清单:

 List<Decimal> SortOrders = new List<Decimal>();

和一个数据行。我想比较列表是否包含来自控件的项目。但我有一个例外,

无法从“对象”转换为“十进制”

DataRow dr = dataSetSomething.Tables[0].NewRow();
...
dr["SortOrder"] = Convert.ToDecimal(numericOrder.Value);// works fine here
if (SortOrders.Contains(dr["SortOrder"]))// exception here, Why?
{
}

感谢帮助。

4

2 回答 2

2

因为类型dr["SortOrder"]object,即使你把 adecimal放在那里。如果你知道它实际上是一个小数,你可以转换它:

if (SortOrders.Contains((decimal)dr["SortOrder"]))
于 2012-07-30T20:34:02.107 回答
2

的类型dr["SortOrder"]Object

.NET的任何类型都是对象(因为所有类型都Object直接或通过继承链继承自 ),因此将 a 分配decimal给 anobject很好。

反之则不然 - 并非所有objects 都是decimal

您需要强制转换以获得预期的行为:

 if (SortOrders.Contains((decimal)dr["SortOrder"]))

(如果基础类型不是 a ,则会抛出异常decimal)。

于 2012-07-30T20:34:12.170 回答