Ami*_*atz 11 c# decimal overflowexception coreclr
我正在使用
Decimal.Round(decimal d)
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
有没有人知道什么输入可以抛出这个异常?
当我们进一步了解您已经发现的内容时,我们最终会实现VarDecRound函数。该函数只有一个返回错误代码的分支,即当其第二个参数cDecimals小于零时。此参数指示要舍入的小数位数:
if (cDecimals < 0)
return E_INVALIDARG;
Run Code Online (Sandbox Code Playgroud)
(这种断言相当于ArgumentException.NET 中的 an 断言)
正如 James Thorpe 在 OP 的评论中指出的那样,类似的断言是在调用链的更上游完成的,如下所示:
if (decimals < 0 || decimals > 28)
FCThrowArgumentOutOfRangeVoid(...)
Run Code Online (Sandbox Code Playgroud)
结论:
执行无法达到导致抛出文档所示错误的程度OverflowException: