Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码契约确保不为循环验证_C#_.net_Code Contracts - Fatal编程技术网

C# 代码契约确保不为循环验证

C# 代码契约确保不为循环验证,c#,.net,code-contracts,C#,.net,Code Contracts,我刚刚开始玩弄.Net代码契约(在VS2010 Ultimate.NET4中),试图了解静态检查器可以证明什么和不能证明什么 我尝试以下示例:- public int Mult(int num1, int num2) { Contract.Requires(num2 >= 0); Contract.Ensures(Contract.Result<int>() == (num1 * num2)); int result =

我刚刚开始玩弄.Net代码契约(在VS2010 Ultimate.NET4中),试图了解静态检查器可以证明什么和不能证明什么

我尝试以下示例:-

public int Mult(int num1, int num2)
    {
        Contract.Requires(num2 >= 0);
        Contract.Ensures(Contract.Result<int>() == (num1 * num2));
        int result = 0;
        for (int i = 0; i < num2; i++)
        {
            result = result + num1;
        }
        return result;
    }
public int Mult(int num1,int num2)
{
合同要求(num2>=0);
Contract.survey(Contract.Result()==(num1*num2));
int结果=0;
对于(int i=0;i
一个简单的乘法函数的实现,通过重复加法

静态检查器无法验证是否满足后条件:-

CodeContracts: ensures unproven: Contract.Result<int>() == (num1 * num2)
CodeContracts:确保未经验证:Contract.Result()==(num1*num2)
我的函数实际上没有正确地计算产品。。或者静态检查器无法验证所需的数据还有其他原因吗?环路的存在是否会导致it困难

如果静态检查器在存在循环时很难验证东西,我可以想象一直有很多警告会让人非常恼火

我不喜欢用假设来告诉它我的想法,因为通常是我的无效假设首先导致了错误

那么,当静态检查器无法证明某些东西时,我们如何着手帮助它呢? 例如,我可以将该函数重写为递归函数—那么检查器是否能够更轻松地验证它?(函数式编程的拥护者可能会说,这就是它应该首先编写的方式——不改变状态等等!)。我还可以通过什么方式更改代码,使静态检查器更容易使用


谢谢!:)

静态检查器将永远无法证明这一点,但运行时检查器将证明这一点

静态检查器在编译时应用。为了能够证明你的能力,它必须能够全面分析你的算法和你在做什么。它没有那么强大


当然,运行时检查器将在每次函数退出时验证确保,并通过适当的单元测试,这将证明确保的有效性。

静态检查器永远无法证明这一点,但运行时检查器将证明这一点

静态检查器在编译时应用。为了能够证明你的能力,它必须能够全面分析你的算法和你在做什么。它没有那么强大


运行时检查器当然会在每次函数退出时验证确保,并通过适当的单元测试,这将证明确保的有效性。

这里有一些相关信息:@Jeffrey,碰巧我链接到了与您相同的博客帖子。有趣!:)这里有一些相关的信息:@Jeffrey,我碰巧链接到了和你一样的博客帖子。有趣!:)