基本上我有一个清单:
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?
{
}
感谢您的帮助。
答案 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"]))
,则会抛出异常)。