【问题标题】:Contract.ForAll doesn't work?Contract.ForAll 不起作用?
【发布时间】:2010-10-22 02:59:28
【问题描述】:

我正在尝试使用Contract.ForAll,看起来我在这里遗漏了一些东西。

考虑这个小例子:

        var l = new List<string>();
        Contract.Assume( Contract.ForAll( l, s => s != null ) );

        foreach ( var s in l ) Console.WriteLine( s.Length );

尽管调用了Contract.Assume,但我确实收到了s.Length 的“可能在空引用上调用方法”警告。

我这样做对吗?它甚至应该工作吗?还是我错过了什么?

【问题讨论】:

标签: c# code-contracts


【解决方案1】:

来自Code Contracts User Manual,第 6.6.1 节检查器的当前限制和错误:

静态合约检查器尚未处理量词 ForAll 或 Exists。

【讨论】:

  • 嗯,这是我的第一个想法,但我发现了以下问题:stackoverflow.com/questions/3104856/…。对原始帖子的第一条评论表明最新版本应该可以正常工作。
  • 有趣...我希望他提供了一个来源!该评论来自 7 月 9 日,最新的用户手册副本日期为 9 月 3 日。不知道该相信谁,但我倾向于文档。
  • 我做了一些搜索,发现 this post 从 2009 年 4 月开始,表明静态检查器不支持 Contract.ForAll,但 MS 希望在 2009 年夏末支持它。然后 this post 来自2010 年 1 月,MS 回复说它仍然无法正常工作。一个月前对该帖子的回复表明它仍然不受支持。
  • 好吧,我想我只需要等待...谢谢:-)
  • 已启用但未完全完成。查看其他答案:)
猜你喜欢
  • 2011-03-07
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多