对象和小数之间的转换?

Jac*_*cek 0 .net c# type-conversion

为什么我不能将对象转换为十进制(代码低于,record["Cost"]等于1 (int))?

我得到以下错误

'无法取消装箱记录["费用"]'

我将使用TryParse方法,但我不明白这个错误的来源是什么.

cost = (decimal?) record["Cost"];
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

值为record["Cost"]boxed int.取消装箱转化仅允许您转换为相同类型.(至少在广义上;存在一些差异,但它们在这里无关紧要.)

你应该做的是取消装箱int然后转换为decimal?:

cost = (decimal?) (int) record["Cost"];
Run Code Online (Sandbox Code Playgroud)

或者如果cost已经声明为类型decimal?,则可以使用隐式转换:

cost = (int) record["Cost"];
Run Code Online (Sandbox Code Playgroud)