c# – 代码合同:如何在财产获取方面满足’确保未经证实’?

c# – 代码合同:如何在财产获取方面满足’确保未经证实’?,第1张

概述我有以下界面: [ContractClass(typeof(MyObjectContract))]public interface IMyObject{ int CountOfItems { get; }} 以下合同: [ContractClassFor(typeof(IMyObject))]public abstract class MyObjectContract{ 我有以下界面:

[ContractClass(typeof(MyObjectContract))]public interface IMyObject{    int CountOfItems { get; }}

以下合同:

[ContractClassFor(typeof(IMyObject))]public abstract class MyObjectContract{    int IMyObject.CountOfItems    {        get        {            Contract.Ensures(Contract.Result<int>() > 0);            return 1;        }    }}

以下实施:

public class MyObject : IMyObject{    private IEnumerable someEnumerable ....     public int CountOfItems    {        get        {            return this.someEnumerable.Count();        }    }}

现在我收到警告说确保未经证实:Contract.Result< int>()> 0

我怎么能证明计数大于零?我不想在getter中抛出异常,我错过了什么?

谢谢

解决方法 正如其他人所提到的,由于基类库(.NET Framework)和静态检查器的限制,您无法静态证明IEnumerable< T> .Count()返回大于0的值.但是,您可以向静态检查器指示您认为该事实为真.这是您使用基类库解决所有此类合同问题的方法,或静态检查程序无法证明的语句.

public int CountOfItems{    get    {        int count = this.someEnumerable.Count();        Contract.Assume(count > 0);        return count;    }}
总结

以上是内存溢出为你收集整理的c# – 代码合同:如何在财产获取方面满足’确保未经证实’?全部内容,希望文章能够帮你解决c# – 代码合同:如何在财产获取方面满足’确保未经证实’?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1234835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存