首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OverFlowException的Contract.Ensures

OverFlowException的Contract.Ensures
EN

Stack Overflow用户
提问于 2013-04-21 12:51:14
回答 1查看 43关注 0票数 0

我有一个简单的方法,可以返回给定数字的指数值:

代码语言:javascript
复制
    public int Exp(int num)
    {
        return Convert.ToInt32(System.Math.Exp(num));
    }

运行Pex时,对于某个较大的数字: 1969057606,我在Summary/Exception字段中得到一个OverFlowException。

如何使用Contract.Ensure()创建Post条件?我尝试了以下操作,但没有任何效果:

代码语言:javascript
复制
Contract.Ensures(Contract.Result<int>() < 2147483647);

// This is because the max value an int variable can hold is 2147483647
EN

回答 1

Stack Overflow用户

发布于 2013-04-22 02:54:42

Contract.Ensures用于在函数运行后断言类的状态,或者,在本例中,断言函数的结果,而不管输入是什么。您需要添加一个Contract.Requires,以便e^num <= int.MaxValue,例如

代码语言:javascript
复制
Contract.Requires<ArgumentOutOfRangeException>(num <= Math.Floor(Math.Log(int.MaxValue)))

尽管您可能希望将最大值计算结果提取为一个常量。

代码语言:javascript
复制
public static readonly int MAX_EXPONENT = Math.Floor(Math.Log(int.MaxValue));
...
Contract.Requires<ArgumentOutOfRangeException>(num <= MAX_EXPONENT)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16128081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档