我正在使用
Decimal.Round(decimal d)
MSDN表示它可以抛出OverflowException
https://msdn.microsoft.com/en-us/library/k4e2bye2(v=vs.110).aspx
我不确定如何发生这种情况。我尝试使用ilSpy查看实现 直到外部实现:
// decimal
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void FCallRound(ref decimal d, int decimals);
是否有人知道哪些输入会引发此异常?
答案 0 :(得分:3)
当我们从你已经发现的东西走得更远时,我们最终会实现VarDecRound功能。此函数只有一个分支,它返回错误代码,即第二个参数cDecimals
小于零时。此参数指示要舍入的小数位数:
if (cDecimals < 0)
return E_INVALIDARG;
(这种断言相当于ArgumentException
在.NET中的含义)
正如James Thorpe在对OP的评论中指出的那样,在调用链here上进一步做出了类似的断言:
if (decimals < 0 || decimals > 28)
FCThrowArgumentOutOfRangeVoid(...)
结论:
执行无法达到导致OverflowException
抛出的the point:{/ p>