无法从'object'转换为'decimal'

时间:2012-07-30 20:31:20

标签: c# types

基本上我有一个清单:

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

和DataRow。 我要比较列表是否包含控件中的项目。 但我有一个例外,

  

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

因为dr["SortOrder"]的类型为object,即使您在其中放置了decimal。如果你知道它实际上是一个十进制数,你可以投射它:

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

答案 1 :(得分:2)

dr["SortOrder"]的类型为Object

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

相反的情况并非如此 - 并非所有object都是object

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

decimal

(如果基础类型不是 if (SortOrders.Contains((decimal)dr["SortOrder"])) ,则会抛出异常)。